Select和Epoll模型的区别
今天在看Nginx配置的时候,心血来潮想要了解下Select模型和Epoll模型。
在说之前先了解下什么是I/O阻塞和I/O非阻塞概念:
一般情况下,应用程序和系统之间,有个队列请求的“交换空间”,应用程序发起的请求先放入这个“交换空间”,然后系统去这个空间去获取请求,这个就叫做阻塞,一个个的请求排着队。
但是有些请求级别比较高,直接排到请求队列前(不允许等待的请求,系统级别),获得优先权,这种就叫非阻塞。
#############################################
从上述了解到阻塞和非阻塞,好嘞,那我们在回头说下Select模型和Epoll模型。
因为一个线程只能处理一个I/O事件,如果想同时处理多个I/O,就需要采用多线程,通过轮询的方式遍历多线程,寻找有空闲线程,这种会大大的消耗时间,所以引入了select和poll概念。
select和poll并没有太大区别,主要是作为“交换空间”的检测者,它会检查所有多线程是否存在I/O事件,如果没有事件,它会阻塞去轮询遍历其它线程。但是它只能告诉我们是否有事件,但是却不能告诉我们那里发生事件,也就是说还是需要轮询的查找事件。
epoll(event poll)不同于无差别轮询,它会告诉我们哪个线程发生什么样的事件通知我们。
所以Select和Epoll模型最大的区别是在于,发现事件处理的方式不同,从而导致效率不同。
###############################################################################
以上说明,仅代表本人对此理解,如有问题,希望不吝赐教!!!

浙公网安备 33010602011771号