Reactor 与Proactor

按照posix标准,系统io分为同步io和异步io两种,其中同步io常用的是bio nio。异步io有aio。

从程序的角度来看,bio在读和写的时候,会阻塞,只有当程序将流写入操作系统或者读到流后,阻塞才会结束,线程接着run下去。

而nio和aio属于非阻塞方式,他们都是基于事件驱动思想,但是nio采用的是reactor 模式,而aio采用的是proactor模式。

Reactor 模式使用event loop 阻塞等在io上,一但io可以读或写,通过分发器,遍历事件注册队列,将事件分发到指定注册的处理器。由应用的处理器来再将流读取到缓冲区或写入操作系统,完成io操作。

Proctor 模式下读和写的方法是异步的,只需调用读和写即可。当有流可读取的时候,操作系统会将流传入read方法缓存区,并通知应用程序。对于写,当操作系统将writer 写入完毕时,操作系统会主动通知应用程序。

proactor模式的Aio,流的读取和写入由操作系统完成,省去了遍历事件通知队列selector 的代价。

Windows上的iocp实现了aio,linux目前只有基于epoll模拟实现的aio。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也...
    闪电是只猫阅读 3,193评论 0 7
  • 1、Netty基础入门 Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应...
    我是嘻哈大哥阅读 4,715评论 0 31
  • 通常的IO操作,只要不是操作系统内存的数据,基本都是IO操作,常见的IO操作,一般都是 操作磁盘、网卡这些(串口这...
    轩居晨风阅读 782评论 0 1
  • 其实每个人和家庭都会遇到瓶颈期,或许是因为学业的压力,工作的失意,亲人的离世。也许你经历了被子里的泣不成声;也许是...
    我的路途阅读 172评论 0 0
  • 1、积极起来。 健身、规划旅游、规划十一、看得到、在职研究生等。还是有很多事情要做的。 2、反思。 周末心情不好极...
    简单生活M阅读 191评论 0 0