比拟于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模式和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
1/2 1

网友点评
精彩导读
科技快报
品牌展示