IO
2020-08-10 10:56:28 0 举报
IO
作者其他创作
大纲/内容
channel1
客户端2
socket1
客户端3
Selector
socket3
NIO相对于BIO来说,它不用为每个客户端起一个线程去处理socket连接,服务端有一个Selecter叫多路服务器,它可以为每个客户端的socket创建一个channel,Selecter会不断的轮询这些channel上有没有对应的socket发送过来的信息,如果有的话,它会在后台起一个线程去处理这个请求,处理完毕这个socket就被回收,线程也会被销毁。在操作系统底层可以看见NIO利用了一些系统控制(sysctl)来表明这个IO是非阻塞的(No blocking),它不会去等待客户端发送数据,因此也就不会发生阻塞。-------------------------------------------------------------------------------------------------NIO相对BIO可以利用非常少的线程去处理大量的客户端请求,这样的话就可以利用newCacheThreadPool线程池来管理这些线程,避免了频繁的线程创建和销毁带来的性能消耗。-------------------------------------------------------------------------------------------------本质上是一个线程对应多个连接
socket2
同步非阻塞IO
同步阻塞IO
服务端
channel3
Buffer
客户端1
serverSocket
在网络通信中,客户端与服务端通过socket进行通信,客户端在自己的socket上绑定服务端上特定的端口号用来发送数据,服务端通过ServerSocket监听特定端口上有没有数据发送过来并接收。---------------------------------------------------------------------------------BIO是一种同步阻塞式IO,在网络通信中,对于每个客户端的socket连接,服务端都会创建一个线程并生成对应的socket来与之通信,BIO的一个特点是,即使客户端没有发送数据,服务端对应的socket也必须时刻监听。这样在操作系统底层会产生大量不必要的系统调用(用户态不断的调用内核态的一些系统函数)。BIO的第二个特点是对于大量的客户端socket连接,服务端也必须创建数量相等的线程来处理这些连接,由于每个线程都会有自己的栈内存,多线程情况下极有可能发生OOM。----------------------------------------------------------------------------------本质上是一个线程对应一个连接
0 条评论
下一页