zoukankan      html  css  js  c++  java
  • 技术派-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处理器在比较了。

  • 相关阅读:
    Django学习过程中遇到的问题
    代理工具WebScarab安装(转载)
    MongoDB安装之window版本的安装
    QT打包
    小工具--串口
    多线程--信号量
    关于多线程
    QQ界面及简单操作实现
    udp通信
    char *p = "abc";char p[] = "abc";两者之间的区别
  • 原文地址:https://www.cnblogs.com/peixuewen/p/12309306.html
Copyright © 2011-2022 走看看