什么是epoll模型?
是一个linux的内核模块,是新的比较高效的IO复用的内核模型,epoll模型就是用来实现IO复用的。
什么是IO复用?
如果一个线程只能处理一个i/o流,那么要处理多个i/o流就需要多个线程或多个进程,这样显然是不够高效的。 那么一个线程能处理多个i/o流的模式就是i/o复用模式。
i/o复用模式解决了并发的情况下i/o阻塞的问题,要尽量让你的程序是非阻塞的,这样会更通畅
写段伪代码来形像的说明一下什么是非阻塞模式
代码示例1:
while ture {
for str in stream[] {
if str has data
read str
}
}
这段代码是不停的循环去接收 i/o流,有效的解决了阻塞的问题,但是由于 不停的循环对CPU造成不小的压力
linux i/0内核模型种类
类型一、select模型、poll模型
类型二、epoll模型
这三种模型产生的顺序是 select -> poll -> epoll
select模型
代码示例2
while ture {
select(streams[]) {
if str has data
read str
}
}
与代码示例1相比,代码示例采用的是select()做为代理 ,只读取有数据的stream[], 提高了cpu的使用效率
epoll模型优势
优势一、解决select模型对于文件句柄FD的打开限制,select对单个进程的句柄找开限制是2048个,在大规模并发的场景下这个瓶颈还是特别明显的
优势二、采用callbak的回调机制优化模型效率