Socket网络编程_之I/O多路复用

  1. IO多路复用:
    每一次网络通信都是一个Socket的I/O流,对于服务器而言,有两种方法
    1.传统的多进程并发模型(每进来一个新的I/O流会分配一个新的进程管理。)
    2.方法二就是I/O的多路复用(单线程,记录跟踪每一个Socket的状态,来即使管理多个I/O流。)
    io多路复用就是多个Sock复用一根网线,这个是由内核与驱动层实现。

这里写图片描述

2.select ,poll,epoll(linux下的)
select(最早)
• select 会修改传入的参数数组,这个对于一个需要调用很多次的函数。
• select 如果任何一个sock(I/O stream)出现了数据,select 仅仅会返回,但是并不会告诉你是那个sock上有数据,于是你只能自己一个一个找。
• Select 只监视1024个链接。

Poll(其次)
• poll 去掉了1024个链接的限制,于是要多少链接呢, 主人你开心就好。
• poll 从设计上来说,不再修改传入数组,不过这个要看你的平台了

Epoll:
• epoll 告诉你sock组里面数据,还会告诉你具体哪个sock有数据,你不用自己去找。
其中除了Epoll是线程安全,其他的poll,select都不是线程安全的
简单说epoll和select/poll最大区别是
1.epoll内部使用了mmap共享了用户和内核的部分空间,避免了数据的来回拷贝
2.epoll基于事件驱动,epoll_ctl注册事件并注册callback回调函数,epoll_wait只返回发生的事件避免了像select和poll对事件的整个轮寻操作。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值