網絡Io实现方式

来源:互联网 发布:山东大学威海知乎 编辑:程序博客网 时间:2024/06/14 04:44

我们在实践中接触最多的网络模型是以太网以及TCP/IP协议栈,UDP在一些场景中也会用到,那么当我们使用Socket 套接字进行网络通信开发时,下面介绍会用到的三种方式。

一:BIO方式

  BIO即BlockingIO ,采用阻塞的方式实现,也就是一个Socket套接字需要使用一个线程来进行处理。发生建立连接、读数据、写数据、的操作时,都可能会阻塞。这个模式的好处是简单,这样带来的问题是一个线程只处理一个Socket,如果是Server端,在遇到支持并发的连接时,就需要更多的线程来完成这个工作,BIO的工作方式图下图


二":NIO方式

     NIO即NonblockingIO,基于时间驱动思想,采用的是Reactor模式,如下图。这个在Java实现的服务端中也是采用比较多的一种方式。相对于BIO,NIO的一个明显好处就是不需要为每一个Socket套接字分配一个线程,而可以在一个线程中处理多个Socket套接字相关的工作。

Reactor 会管理所有的handler ,并且把出现的事件,交给相应的Handler 去处理。通过Reactor 对所有客户端的Scoket 套接字的事件 做处理,然后派发到不同的线程中。这样就解决了BIO 中卫支撑更多的Socket 套接字而需要打开更多的线程的问题。

如下图



3 AIO方式后续再写吧。

对技术感兴趣的朋友请加入qq 群:631294108.