[转帖]技术派-epoll和IOCP之比较

技术,epoll,iocp,比较 · 浏览次数 : 0

小编点评

**epoll 比 IOCP 的效率高吗?** epoll 比 IOCP 在效率上更高,因为 epoll 可以异步处理事件,而 IOCP 需要同步处理事件。 **epoll 的优势:** * 可以异步处理事件。 * 可以降低系统负载。 **IOCP 的优势:** * 更快。 * 更可靠。 **epoll 和 IOCP 的效率比较:** * epoll 的效率略高一些,但与硬件配置无关。 * 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店)

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


如果L店的工作人员,工作效率非常高,很快就轮到你打印了。

而W店的工作人员,慢慢悠悠,边工作边吃饭边聊天,很久才轮到你的打印。

请问:那个会先打印完?

所以,谁更快,还与打印店的工作方式有很大关系。

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

两者同样重要。

当然你也可以说,也很有可能是,L店的打印机是时速30张/分钟,W店打印机时速120张/分钟,这个就属于硬件配置了。

这就等于是i9处理器与二十年前的赛扬II处理器在比较了。

 

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux27618 人正在系统学习中

与[转帖]技术派-epoll和IOCP之比较相似的内容:

[转帖]技术派-epoll和IOCP之比较

直入正题 Epoll 用于Linux系统; IOCP 是用于 Windows; Epoll 是当事件资源满足时发出可处理通知消息; IOCP 则是当事件完成时发出完成通知消息。 从应用程序的角度来看, Epoll 本质上来讲是同步非阻塞的; IOCP 本质上来讲则是异步操作; 举例说明吧 有一个打印

[转帖]一文浅析Nginx线程池!

https://zhuanlan.zhihu.com/p/616500765 Nginx通过使用多路复用IO(如Linux的epoll、FreeBSD的kqueue等)技术很好的解决了c10k问题,但前提是Nginx的请求不能有阻塞操作,否则将会导致整个Nginx进程停止服务。 但很多时候阻塞操作是

[转帖]技术派-关于最佳线程数的计算的准确理解

Venkat Subramaniam 博士在《Programming Concurrency on the JVM》中提到关于最优线程数的计算: The minimum number of threads is equal to the number of available cores. If a

[转帖]技术派-汇编语言指令集(intel X86系列)

针对汇编语言指令集(intel X86系列8086/80186/80286/80386/80486) AAA - Ascii Adjust for Addition AAD - Ascii Adjust for Division AAM - Ascii Adjust for Multiplicati

[转帖]终于搞懂了服务器为啥产生大量的TIME_WAIT!

http://www.yunweipai.com/40430.html 运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维 写在开头,大概 4

[转帖]如何提高Linux下块设备IO的整体性能?

http://www.yunweipai.com/6989.html 运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维 作者介绍 邹立巍 Li

[转帖]【技术剖析】15. Native Memory Tracking 详解(1):基础介绍

https://bbs.huaweicloud.com/forum/thread-0246998875346680043-1-1.html 0.引言 我们经常会好奇,我启动了一个 JVM,他到底会占据多大的内存?他的内存都消耗在哪里?为什么 JVM 使用的内存比我设置的 -Xmx 大这么多?我的内存

[转帖]【技术剖析】16. Native Memory Tracking 详解(2):追踪区域分析(一)

https://bbs.huaweicloud.com/forum/thread-0295101552606827089-1-1.html 上篇文章 Native Memory Tracking 详解(1):基础介绍 中,分享了如何使用NMT,以及NMT内存 & OS内存概念的差异性,本篇将介绍NM

[转帖]【技术剖析】17. Native Memory Tracking 详解(3):追踪区域分析(二)

https://bbs.huaweicloud.com/forum/thread-0227103792775240073-1-1.html 应用性能调优 发表于 2022-11-14 15:19:36143查看 上篇文章 Native Memory Tracking 详解(2):追踪区域分析(一) 

[转帖]【技术剖析】18. Native Memory Tracking 详解(4):使用 NMT 协助排查内存问题案例

https://bbs.huaweicloud.com/forum/thread-0211103793043202049-1-1.html 其他 发表于 2022-11-14 15:38:571174查看 从前面几篇文章,我们了解了 NMT 的基础知识以及 NMT 追踪区域分析的相关内容,本篇文章将