上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.2.1 伪异步I/O模型图
采用线程池和任务队列可以实现一种叫做伪异步的I/O通信框架,它的模型图如图2-5所示。
当有新的客户端接入的时候,将客户端的Socket封装成一个Task(该任务实现java.lang.Runnable接口)投递到后端的线程池中进行处理,JDK的线程池维护一个消息队列和N个活跃线程对消息队列中的任务进行处理。由于线程池可以设置消息队列的大小和最大线程数,因此,它的资源占用是可控的,无论多少个客户端并发访问,都不会导致资源的耗尽和宕机。
图2-5 伪异步I/O服务端通信模型(M:N)
下面的小节,我们依然采用时间服务器程序,将其改造成伪异步I/O时间服务器,然后通过对代码进行分析,找出其弊端。