美文网首页
Kitura的IO

Kitura的IO

作者: 小凿子 | 来源:发表于2017-01-27 17:42 被阅读0次

背景知识

关于同步/异步,阻塞/非阻塞的解释除了参见《Unix网络编程》之外,知乎中,“愚蠢”和“大姚”分别进行了通俗和详尽的解释。

参考:https://www.zhihu.com/question/19732473

阻塞式的结构性能一定是低下的,这里主要比较同步非阻塞式和异步非阻塞式结构,也就是Reactor和Proactor这两个结构。

参考:http://www.artima.com/articles/io_design_patterns.html


正文

Reactor:多路分用器等待事件告知读写准备就绪,将事件分发给合适的Handler,Handler真正负责读写工作(这里就是同步的地方)。

Proactor:IO的读写操作是由OS完成的。Handler将用户定义好的缓冲区作为参数传给OS,等待OS完成读写操作后,由事件的多路分用器通知Handler。

Reactor中的Handler关注(Ready to Read)事件,Handler负责读写。

Proactor中的Handler关注(Receiving Completion)事件,OS负责读写。

为什么不能向上层程序员提供统一的接口,让程序员不关心其内部实现到底是Reactor还是Proactor呢?

由于Proactor结构需要OS Async API的支持,但并不是所有的OS都提供健壮的API。所以很难设计出统一的外部接口,所以也就很难设计出可移植的框架来封装与操作系统有关的操作。不过文中也提到了一种简单的方法来解决这个问题,具体见Page 2/3.

理论上Proactor模式具有最好的扩展性和性能,但Nginx选择了Reactor,其原因如下:

Proactor逻辑实现复杂,并且Proactor需要操作系统的异步API支持,而Linux主要还是通过Epoll和Select来进行事件驱动。对异步API支持比较好的是Windows IOCP。

Kitura在OSX下使用了dispatch_io,在Linux下使用了Epoll。其原因是Epoll在Linux下性能较低,原因不明。

参考:https://github.com/IBM-Swift/Kitura/issues/121


Reference

https://segmentfault.com/a/1190000002715832

相关文章

  • Kitura的IO

    背景知识 关于同步/异步,阻塞/非阻塞的解释除了参见《Unix网络编程》之外,知乎中,“愚蠢”和“大姚”分别进行了...

  • Kitura

    Kitura是IBM开发的一个Web框架 本系列文章主要用于学习Kitura源码,关于如何使用Kitura请参见I...

  • Kitura的多线程

    在Nginx中,由Master进程管理多个Worker进程,而每一个连接是由一个Worker进程处理的。Nginx...

  • Swift服务器开发之Vapor

    前言:Swift服务器开发,主要有四个框架perfect,vapor,kitura,zewo它们之间的优异和区别,...

  • Swift Perfect服务器开发(解决一切疑难杂症)

    目前Swift服务器开发,主要有四个框架perfect,vapor,kitura,zewo它们之间的优异和区别,各...

  • cocoapods填坑

    前段时间要学习Kitura的时候,clone代码,git install发现出现一个大错误~ 这是什么鬼?!!! ...

  • Java中的IO模型

    Java中的IO模型 Java中的IO模型有四种: 同步阻塞IO 同步非阻塞IO IO多路复用 异步IO 其中IO...

  • linux五种IO模型

    Linux下主要的IO主要分为:阻塞IO(Blocking IO),非阻塞IO(Non-blocking IO),...

  • 「基础知识总结」 IO模型

    IO模型 五种IO模型包括:阻塞IO、非阻塞IO、信号驱动IO、IO多路转接、异步IO。其中,前四个被称为同步IO...

  • Netty-基础篇(1)-网络IO,同步IO&异步IO,阻塞IO

    目录: 1、阻塞IO(Block IO)与非阻塞IO(Non-Block IO)1.1、阻塞IO(Block IO...

网友评论

      本文标题:Kitura的IO

      本文链接:https://www.haomeiwen.com/subject/pepmbttx.html