标签:维护 实现 detail 指定 监听端口 and 事件 details 成功
方法一:
# 使用while循环,不断监听端口是否有新的套接字链接
while(true){
socket = accept();
handle(socket)
}
# 做法局限:处理效率低下,并发是请求只能阻塞
方法二:
# 一个连接对应一个线程
while(true){
socket = accept();
new thread(socket);
}
# 每个线程阻塞不会影响到后续请求,但对资源要求非常高。线程粒度大,每个线程一次性处理所有交互事情(连接、读取和写入),限制了吞吐量。
方法三:
# 将线程粒度减小。将一次连接的操作划分为更细的粒度或者过程。这样虽然线程数量变多,但是处理的事情更为简单和单一
事件驱动(event handling)
可以处理一个或多个输入源(one or more inputs)
通过Service Handler同步的将输入事件(Event)采用多路复用分发给对应Handler处理
NIO的优点:
不足
Reactor将被拆分的子过程对应到Handler上,每一种handler会处理一种event。Selector全局管理进行全局管理。我们只需要注册感兴趣的channel事件,selector就会通过轮询的方式不断检测channel上的事件是否发生。如果没有事件发生则线程阻塞,如果时间发生,则调用相应handler进行处理。
非Reactor模型
Reactor模型
单Reactor单线程模型
改进点:基于事件模式,当事件触发时,才调用处理器进行处理
Acceptor主要任务就是构建handler ,在获取到和client相关的SocketChannel之后 ,绑定到相应的hanlder上,对应的SocketChannel有读写事件之后,基于racotor 分发,hanlder就可以处理了(所有的IO事件都绑定到selector上,有Reactor分发)。
单Reactor多线程模型
改进:使用多线程处理业务逻辑。
多Reactor多线程模型
https://blog.csdn.net/qq_24313635/article/details/80989450
标签:维护 实现 detail 指定 监听端口 and 事件 details 成功
原文地址:https://www.cnblogs.com/boycelee/p/10014417.html