BIO到NIO的转换过程是怎样的?

2026-04-02 00:540阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1731个文字,预计阅读时间需要7分钟。

BIO到NIO的转换过程是怎样的?

同步阻塞IO单线程编程的最初网络编程思路是:服务器用一个while循环不断监听端口,如果有新的套接字连接,就调用一个同步阻塞IO操作来处理这个连接。这种思路的本质就是服务器器用同步阻塞IO来处理客户端的请求。

同步阻塞IO单线程BIO最原始的网络编程思路就是服务器用一个while循环不断监听端口是否有新的套接字连接如果有那么就调用一个处 同步阻塞IO

单线程BIO

最原始的网络编程思路就是服务器用一个while循环不断监听端口是否有新的套接字连接如果有那么就调用一个处理函数处理。

while(true){ socket accept(); handle(socket) }

这种方法的最大问题是无法并发效率太低。如果当前的请求没有处理完那么后面的请求只能被阻塞服务器的吞吐量太低。

多线程BIO

针对上面的问题很自然想到了使用多线程处理IO也就是很经典的connection per thread每一个连接用一个线程处理。

while(true){ socket accept(); new thread(socket); }

tomcat服务器的早期版本确实是这样实现的。多线程的方式确实一定程度上极大地提高了服务器的吞吐量因为之前的请求在read阻塞以后不会影响到后续的请求因为他们在不同的线程中。这也是为什么通常会讲“一个线程只能对应一个socket”的原因。 那么线程中创建多个socket不行吗语法上确实可以但是实际上没有用每一个socket都是阻塞的这就遇到同单线程IO一样的问题。所以在一个线程里只能处理一个socket就算accept了多个也没用前一个socket被阻塞了后面的是无法被执行到的。

Java BIO示例

下面基于同步阻塞式IO创建一个时间服务TimeServer。

阅读全文

本文共计1731个文字,预计阅读时间需要7分钟。

BIO到NIO的转换过程是怎样的?

同步阻塞IO单线程编程的最初网络编程思路是:服务器用一个while循环不断监听端口,如果有新的套接字连接,就调用一个同步阻塞IO操作来处理这个连接。这种思路的本质就是服务器器用同步阻塞IO来处理客户端的请求。

同步阻塞IO单线程BIO最原始的网络编程思路就是服务器用一个while循环不断监听端口是否有新的套接字连接如果有那么就调用一个处 同步阻塞IO

单线程BIO

最原始的网络编程思路就是服务器用一个while循环不断监听端口是否有新的套接字连接如果有那么就调用一个处理函数处理。

while(true){ socket accept(); handle(socket) }

这种方法的最大问题是无法并发效率太低。如果当前的请求没有处理完那么后面的请求只能被阻塞服务器的吞吐量太低。

多线程BIO

针对上面的问题很自然想到了使用多线程处理IO也就是很经典的connection per thread每一个连接用一个线程处理。

while(true){ socket accept(); new thread(socket); }

tomcat服务器的早期版本确实是这样实现的。多线程的方式确实一定程度上极大地提高了服务器的吞吐量因为之前的请求在read阻塞以后不会影响到后续的请求因为他们在不同的线程中。这也是为什么通常会讲“一个线程只能对应一个socket”的原因。 那么线程中创建多个socket不行吗语法上确实可以但是实际上没有用每一个socket都是阻塞的这就遇到同单线程IO一样的问题。所以在一个线程里只能处理一个socket就算accept了多个也没用前一个socket被阻塞了后面的是无法被执行到的。

Java BIO示例

下面基于同步阻塞式IO创建一个时间服务TimeServer。

阅读全文