IO NIO Reactor

时间:2023-02-01 07:58:08


这里主要谈一下网络通信

1 IO

客户端和服务器端通信,如果服务器端(餐厅)是单线程的(只有一个服务员),那么一个socket客户端(客户)获得服务器端连接(进入餐厅大门),因为只有一个线程(服务员),其他的socket客户端(其他的客户)都不能获得连接。就算获得连接的socket客户端(进入餐厅的客户)只在服务器端闲着(和餐厅服务员聊天),其他的客户端仍然无法和服务器端连接(服务员只有一个,其他的客户获得不了服务),服务器利用率是极低的。

简而言之,餐厅只有一个服务员,只允许一个客户进餐厅,其他的客户必须等着,诺大的餐厅只有一个客户,餐厅利用率是非常低的。

IO NIO Reactor

改进,餐厅多招几个服务员,每个服务员为一个客户服务。如果,有10000个客户,餐厅就要招10000个服务员。这显然是不现实的。这也是传统IO存在的问题,单客户端、单服务端,一个服务端只能为一个客户端提供服务。

IO NIO Reactor

2 NIO

IO是单服务端 单客户端,现在NIO对其改进一下添加了Selector,那么一个服务端就可以为多个客户端进行服务了。

IO NIO Reactor

 Seletor就非常重要了,Selector就是单线程的Reactor模型

3 单线程Reactor模型

IO NIO Reactor

服务员是单线程的,如果客户1点餐慢,客户2,3,4需要一直等待客户1点餐。单线程模型依然存在问题。

IO NIO Reactor

4 Netty(多线程Reactor模型)

IO NIO Reactor

两个关键的成员boss和worker