select和selector多路复用创建socket链接

博客介绍了I/O多路复用的概念,包括阻塞IO、非阻塞IO和多路复用IO。重点讨论了select、epoll和poll三种实现方式,强调了epoll的高效性和边缘触发机制。文中还提到select的文件描述符数量限制,以及poll没有此限制。最后,展示了如何在Python中使用selector模块实现服务器端的I/O多路复用。
摘要由CSDN通过智能技术生成

学习过后,我们了解i\o方式 阻塞io,非阻塞io,io多路复用,异步io,一个io操作实际上是把数据放到内核缓存区,然后从这copy下来,用户实际上只是调用这个接口
I/O通信其实是用户调用内核接口,内核将一个文件描述符放到缓存空间,用户在去获取,
阻塞很简单理解一下,就是函数去访问缓存空间,没有事件就一直等待,线程被挂起直到有结果返回,
非阻塞则是函数去访问缓存空间,没有事件就返回一个值,多路复用I/O是同时监听多个接口,当有一个接口返回值时候,我们则return,
有三种方式可以实现
select:select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点,不过select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,另外,select()所维护的存储大量文件描述符的数据结构,随着文件描述符数量的增大,其复制的开销也线性增长。同时,由于网络响应时间的延迟使得大量TCP连接处于非活跃状态,但调用select()会对所有socket进行一次线性扫描,所以这也浪费了一定的开销
epoll:epoll可以同时支持水平触发和边缘触发,理论上边缘触发的性能要更高一些,但是代码实现相当复杂。
epoll同样只告知那些就绪的文件描述符,而且当我们调用epoll_wait()获得就绪文件描述符时,返回的不是实际的描述符,而是一个代表就绪描述符数量的值,你只需要去epoll指定的一个数组中依次取得相应数量的文件描述符即可,这里也使用了内存映射(mmap)技术&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值