作家
登录

高性能IO模型浅析

作者: 来源: 2017-07-10 11:53:27 阅读 我要评论

{

比拟于IO多路复竽暌姑模型,异步IO并不十分布用,不少高机能并发办事法度榜样应用IO多路复竽暌姑模型+多线程义务处理的架构根本可以知足需求。何况今朝操作体系对异步IO的支撑场非特别完美,更多的是采取IO多路复竽暌姑模型模仿异步IO的方法(IO事宜触发时不直接通知用户线程,而是将数据读写完毕后放到用户指定的缓冲区中)。Java7之后已经支撑了异步IO,感兴趣的读者可以测验测验应用。

办事器端编程经常须要构造高机能的IO模型,常见的IO模型有四种:

Reactor.register(new UserEventHandler(socket));

}

用户须要重写EventHandler的handle_event函数进行攫取数据、处理数据的工作,用户线程只须要将本身的EventHandler注册到Reactor即可。Reactor中handle_events事宜轮回的伪代码大年夜致如下。

Reactor::handle_events() {

while(1) {

sockets = select();

for(socket in sockets) {

get_event_handler(socket).handle_event();

}

}

事宜轮回赓续地调用select获取被激活的socket,然后根据获取socket对应的EventHandler,履行器handle_event函数即可。

IO多路复竽暌姑是最常应用的IO模型,然则其异步程度还不敷“彻底”,因为它应用了会壅塞线程的select体系调用。是以IO多路复竽暌姑只能称为异步壅塞IO,而非真正的异步IO。

四、异步IO

“真正”的异步IO须要操作体系更强的支撑。在IO多路复竽暌姑模型中,事宜轮回将文件句柄的状况事宜通知给用户线程,由用户线程自行攫取数据、处理数据。而在异步IO模型中,当用户线程收到通知时,数据已经被内核攫取完毕,并放在了用户线程指定的缓冲区内,内核在IO完成后通知用户线程直接应用即可。

异步IO模型应用了Proactor设计模式实现了这一机制。

图6 Proactor设计模式

如图6,Proactor模式和Reactor模式在构造上比较类似,不过在用户(Client)应用方法上差别较大年夜。Reactor模式中,用户线程经由过程向Reactor对象注册感兴趣的事宜监听,然后事宜触发时调用事宜处理函数。而Proactor模式中,用户线程将AsynchronousOperation(读/写等)、Proactor以及操作完成时的CompletionHandler注册到AsynchronousOperationProcessor。AsynchronousOperationProcessor应用Facade模式供给了一组异步操作API(读/写等)供用户应用,当用户线程调用异步API后,便持续履行本身的义务。AsynchronousOperationProcessor 会开启自力的内核线程履行异步操作,实现真正的异步。当异步IO操作完成时,AsynchronousOperationProcessor将用户线程与AsynchronousOperation一路注册的Proactor和CompletionHandler掏出,然后将CompletionHandler与IO操作的结不雅数据一路缀发给Proactor,Proactor负责回调每一个异步操作的事宜完成处理函数handle_event。固然Proactor模式中每个异步操作都可以绑定一个Proactor对象,然则一般在操作体系中,Proactor被实现为Singleton模式,以便于集中化分发操作完成事宜。


  推荐阅读

  长文解密卷积神经网络体系结构

引言先坦白地说,有一段时光我无法真正懂得深度进修。我查看相干研究论文和文┞仿,感到深度进修异常复杂。我测验测验去懂得神经收集及其变体,但依然认为艰苦。接着有一天,我决定一步一>>>详细阅读


本文标题:高性能IO模型浅析

地址:http://www.17bianji.com/lsqh/36095.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)