网络编程笔记(一. 网络IO多路复用)

多路复用有select, poll, epoll三种实现
select中的描述符集合结构类似这样

struct fd_set{
    long a[1024/2048];//大小由宏决定
    //监听时a[i]=0,1表示是否监听文件描述符i;返回事件后a[i]=0,1表示是否i可操作
};

比较:

poll与select
    1.不需要计算最大文件描述符maxfdp+1
    2.大数目时,select需要扫描[0,maxfdp]范围,而poll只需要扫描所有需要监听的描述符
    3.select监听的数目固定(fd_set里固定了数组大小),在稀疏的文件描述符时效率低下;而poll可以使用恰当大小来存放监听事件
    4.select调用返回会修改fd_set(监听、发生事件使用同一个数组表示),所以每次都需要重新添加监听;而poll将监听与返回的事件区分开来,可以复用。

select可移植性强,超时值精度高
epoll:
    1.监听数目很多(能创的文件描述符个数)
    2.通过返回的发生事件(里保存了fd)来回调处理,而不需要轮询所有监听的描述符
    3.内核与用户空间共享内存,减少描述符、数据在内核与用户空间的移动

感觉理解的哪里怪怪的,哪位大佬帮忙指正下,最好解释下select的那几个操作宏

全部评论

相关推荐

Java抽象带篮子:难蚌,点进图片上面就是我的大头😆
点赞 评论 收藏
分享
害怕一个人的小黄鸭胖乎乎:笑死了,没有技术大牛,招一堆应届生,不到半年,代码就成屎山了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务