什么是select,它的工作原理,优缺点?
select是多路复用模型下的一个模块,
工作原理:
通过调用select,向内核拷贝fd(文件描述符),
内核监视select下的所有套接字,会遍历所有套接字,查看是否有事件发生,
没有事件发生则睡眠,直到有事件发生,或者timeout时间到了后,唤醒,再次遍历,
内核一旦查看到有事件发生,则返回遍历后的fd,
将fd从内核拷贝到用户空间,用户进程再根据fd遍历一遍,找到发生事件的套接字
优点:使服务端达到并发的效果,只用到单线程,所用的cpu资源少,减少了网络io堵塞
缺点:
1,遍历的fd在linux上有数量限制,1024个
2,fd从用户态拷贝到内核态,每次都需要复制,产生巨大的开销
3.对fd的扫描形式是一种遍历的方式,要找到发生的事件必须从头开始扫,
对没有发生事件的fd做了大量无用功.
什么是epoll,工作原理,优缺点?
epoll是linux系统提供的多路复用模块
工作原理:
epoll模块提供了三个函数调用,分别是epoll_creat,epoll_ctl,epoll_wait
调用epoll_create,创建红黑树,和就绪链接表
调用epoll_ct,若要添加新的句柄,如果存在则返回,
不存在则添加到树干上,然后向内核注册回调函数,
当事件发生的时候,可以往就绪链接表中插入数据
调用epoll_wait,查看就绪链接表中有没有就绪的fd,
如果有则返回就绪的fd数目,通过mmap(内存映射技术)得到相应的文件描述符,
没有则睡眠,直到有就绪的fd或者timeout时间到了
优点:
1,没有最大的fd限制,只受到服务端内存大小的限制
2.效率提升,只有句柄中有事件发生,就会调用回调函数,把相应的fd放到就绪链接表中,
不用从头开始遍历fd,
3.省去了不必要的内存拷贝,如mmap技术
缺点:
当fd数量较少时,epoll的速度不见得比select的速度快
对于单个连接,不存在优势
相关推荐
select-epollLinux网络编程中select/epoll的比较编译命令:gcc select-server.c -o select-servergcc epoll-server.c -o epoll-servergcc select-client.c -o client运行命令:./select-server 7838 2./epoll-server...
linux 高并发处理 select epoll 等相关技术,希望能对大家有帮助。
linux下的epoll版telnet服务器。。linux下的epoll版telnet服务器。。linux下的epoll版telnet服务器。。linux下的epoll版telnet服务器。。linux下的epoll版telnet服务器。。linux下的epoll版telnet服务器。。linux下...
使用select和epoll实现多路复用,并使用jmeter进行测试。压缩包包含代码和学生使用的完整实验报告
linux中 epoll poll 和select的区别
select poll epoll 代码实例
下面文章在这段时间内研究 select/poll/epoll的内核实现的一点心得体会: select,poll,epoll都是多路复用IO的函数,简单说就是在一个线程里,可以同时处理多个文件描述符的读写。 select/poll的实现很类似,epoll...
linux网络编程的一些技巧,包括socket,thread pool, select,epoll等
select,poll和epoll详解
Linux系统编程——I/O多路复用select、poll、epoll的区别使用,相关教程如下: http://blog.csdn.net/tennysonsky/article/details/45745887
select poll epoll 原理介绍
有三个方式select、poll、epoll。 select:将文件描述符放入一个集合中,调用select时,将这个集合从用户空间拷贝到内核空间(缺点:每次都要复制,开销大),由内核根据就绪状态修改该集合的内容。 poll:和select...
EPOLL-linux下select-poll的增强版
无论是select,poll还是epoll都需要内核把FD消息通知给用户空间,如何避免不必要的内存拷贝就很重要,在这点上,epoll是通过内核于用户空间mmap同一块内存实现的。而如果你想我一样从2.5内核就关注epoll的话,一定...
多路并发情况下的CS模型实例 select poll epoll
它主要涉及到TCP/UDP协议以及select/poll/epoll等多路复用技术。 TCP/UDP协议是网络通信的基础,其中TCP协议提供面向连接的可靠数据传输,而UDP协议则提供无连接的不可靠数据传输。在Linux网络编程中,开发者需要...
1.1.5 关于epoll和select的区别,以下哪些说法是正确的
多路复用
1. 实现IO复用的传统方法select和poll,但是性能不满意,因此有Linux的epoll,BSD的kqueue,Solaris的/dev/poll,Wi