epoll到底是属于同步还是异步 网络技术 系统运维

admin 3月前 109

学习tornado、asyncio这些异步网络库时,遇到了同样的问题,网上查到的也都说不明白,原来几个概念没搞清楚。

    1,I/O操作有多种,处理socket是一种,磁盘读写也是一种,暂时分为网络I/O和文件I/O、

    2,I/O多路复用是操作系统级别的,属于linux操作系统的五种I/O模型中的一种,是操作系统级别同步非阻塞的。

    3,异步网络库 twisted、tornado、asyncio所谓的异步,是应用级别的异步,底层确实是基于epoll实现,基本上都是处理网络 I/O,而且都是基于事件驱动的,使用时划分事件也大多是根据网络请求。

    4,操作系统级别的异步I/O才是真正异步非阻塞的,然后并没有很多应用,貌似unix平台没有,windows NT平台有也很少,而且基本都是文件I/O。

    5,I/O多路复用的实现用的比较多,linux平台的epoll,windows平台的select等,基于epoll,select的应用大多是实现网络I/O。

 

  所以,遇到异步框架,异步网络库都应该知道是应用级别的异步,而且基本上都是基于epoll/select实现的。

  已知tornado会根据系统平台,选择epoll还是select。

  实现高并发有多种方式,python多进程可以利用多核优势,协程(gevent、asyncio)可以实现应用级别的异步,celery实现任务异步,消息队列实现服务解耦等等,项目中可以根据实际情况选择或组合不同的方式。

  tornado(web框架/异步网络库):进程+异步+epoll

  asyncio:协程+epoll,使用中需要相应的异步库,常用aiohttp

  gevent:greenlet+猴子补丁,猴子补丁把socket相关库改为非阻塞

 

  摘自知乎:个人理解,应用层上的epoll确实是属于异步,而系统层上的epoll并非绝对意义上的异步。



少客联盟- 版权声明 1、本主题所有言论和图片纯属会员个人意见,与少客联盟立场无关。
2、本站所有主题由该帖子作者发表,该帖子作者admin少客联盟享有帖子相关版权。
3、少客联盟管理员和版主有权不事先通知发贴者而删除本文。
4、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者admin少客联盟的同意。
5、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任。
6、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
7、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意。
8、官方反馈邮箱:chinasuc@chinasuc.cn


上一篇:CDN 内容分发服务
下一篇:区块链技术基础:分布式账本简介
Whatever is worth doing is worth doing well. juvenile hacker league
最新回复 (0)
    • 少客联盟
      2
        登录 注册 QQ登录(停用)
返回