您现在的位置:诗歌范文 > 西方文学 > 正文

《Scalable IO in Java》笔记

《Scalable IO in Java》笔记

ScalableIOinJava基本上所有的网络处理程序都有以下基本的处理过程:ReadrequestDecoderequestProcessserviceEncodereplySendreplyClassicServiceDesigns简单的代码实现:Server=(!Thread(Handler(())).start();}(IOExceptionex){Handler=[]input=[]output=(IOExceptionex){[]process([]cmd){对于每一个请求都分发给一个线程,每个线程中都独自处理上面的流程。 这种模型由于IO在阻塞时会一直等待,因此在用户负载增加时,性能下降的非常快。

server导致阻塞的原因:1、serversocket的accept方法,阻塞等待client连接,直到client连接成功。 2、线程从socketinputstream读入数据,会进入阻塞状态,直到全部数据读完。 3、线程向socketoutputstream写入数据,会阻塞直到全部数据写完。

client导致阻塞的原因:1、client建立连接时会阻塞,直到连接成功。

2、线程从socket输入流读入数据,如果没有足够数据读完会进入阻塞状态,直到有数据或者读到输入流末尾。

3、线程从socket输出流写入数据,直到输出所有数据。 4、()设置socket的延迟时间,当socket关闭时,会进入阻塞状态,直到全部数据都发送完或者超时。 改进:采用基于事件驱动的设计,当有事件触发时,才会调用处理器进行数据处理。

BasicReactorDesign代码实现:Reactorport)IOException{selector==);SelectionKeysk=(selector,_ACCEPT);(Acceptor());(!==(IOExceptionex){=(Runnable)(());(r!=AcceptorRunnable{=(c!=(IOExceptionex){Handler==READING=0,SENDING=1state==c;(sk=(sel,0);(_READ);inputIsComplete(){outputIsComplete(){process(){(state==(state==(IOExceptionex){read()=(_WRITE);send()(outputIsComplete())();Handler{run(){Sender());Senderrun(){。

上一篇:UNIX网络编程读书笔记:IO模型(阻塞、非阻塞、IO复用、信号驱动、异步)
下一篇:没有了
回到顶部