技术派-epoll和IOCP之比较

本文对比了Linux下的epoll模型与Windows下的IOCP模型。epoll为同步非阻塞模型,通过通知形式告知资源可用;IOCP为异步模型,在事件完成后主动处理并通知。文章通过打印店的例子生动解释了两种模型的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

区别

Linux的epoll模型

windows的IOCP模型


区别

直入正题:

  • Epoll 是Linux系统下的模型;
  • IOCP 是Windows下模型;
  • Epoll 是当事件资源满足时发出可处理通知消息;
  • IOCP 则是当事件完成时发出完成通知消息;
  • 从应用的角度看, Epoll 是同步非阻塞的;IOCP是异步操作;

举例说明,更加清晰透彻:

有一个打印店,有一台打印机,好几个人在排队打印。
普通打印店,正常情况是:

  • 1、你准备好你的文档,来到打印店;
  • 2、排队,等别人打印完;
  • 3、轮到你了,打印你的文档;
  • 4、你取走文档,做后面的处理。

这种方式,你会浪费很多等待时间,非常低效。
于是, Linux和windows都提出了自己最优的模型。

Linux的epoll模型

则可以描述如下:

  • 1、你准备好你的文档,来到打印店;
  • 2、告诉店小二说,我先排队在这位置,轮到我了通知一声(假定你来回路上不耗时);
  • 3、你先去忙你的事情去了;
  • 4、轮到你了,店小二通知你(假定你来回路上不耗时);
  • 5、你获得打印机使用权了,开始打印;
  • 6、打印完了拿走。

你会发现,你节省了排队的时间,等到你能获得打印机资源的时候,告诉你来处理。但是这里,就浪费了一点时间,就是你自己打印。这就是epoll的同步非阻塞。

windows的IOCP模型

则可以描述如下:

  • 1、你准备好你的文档,来到打印店;
  • 2、告诉店小二说,我先排队,轮到我了帮打印下,好了通知我(也假定你来回路上不耗时);
  • 3、你先去忙你的事情去了;
  • 4、轮到你的文档了,店小二直接帮你打印好了,通知你;
  • 5、你来了,直接取走文档。

你会发现,你不但节省了排队时间,你连打印时间都节省了, 完全异步操作。

很显然,IOCP简直是太完美了,可以称得上是最高性能的服务器网络模型了。

那么问题来了,是不是epoll就比iocp效率低了?

不一定。

同样是以打印为例:
假定现在有两个打印店,分别命名为:

epoll打印店(L店), IOCP打印店(W店)

你把相同的材料2份,分别放在两个店,哪一个会先完成呢?

如果L店的工作人员,工作任务少,效率非常高,很快就轮到你打印了;
而W店的工作人员,工作任务巨多,慢慢悠悠,边工作边吃饭边聊天,很久才轮到你的打印。

请问:那个会先打印完? 所以,谁更快,还与打印店的工作方式有很大关系。

windows启动后,即便什么也不干,就已经有近百个进程+近百个服务在后台运行+一千多个线程在工作了,外加大量图形化界面占用许多系统资源。而Linux启动后仅有几个进程几个服务在后台,轻装上阵,只要你不启动图形化应用,就几乎没有什么图形化应用占用系统资源。

回到本话题,决定效率快慢的,模型是一方面;操作系统的底层协议处理架构,也是一方面。

两者同样重要。

当然你也可以说,也很有可能是,L店的打印机是时速30张/分钟,W店打印机时速120张/分钟,非常正确,但是这就属于硬件配置的范畴了,这就等于是i9处理器与二十年前的赛扬II处理器在比较了。

搁笔。如果遇到有什么疑问,可留言或站内私信消息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌志辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值