通过在 Tomcat 中设置 NIO 连接器,我们有 N 个池线程和 M 个工作线程。
通过设置 BIO 连接器,我们可以在线程池中拥有 N*M 个线程。那么两个连接器之间会有什么区别呢?
在 BIO 中,每个新连接都会从连接器线程池中分配一个线程,并且该线程一直分配给该连接,直到连接关闭。这意味着线程在请求之间会长时间空闲(即在 HTTP 保持活动期间)。
在 NIO 中,每个新连接都会传递给 Poller。当要处理的连接上有数据时,会通知轮询线程。然后轮询器从连接器线程池中为该连接分配一个线程,并且该线程一直分配给该连接,直到所有数据都被读取/写入。然后将连接传递回轮询器,以便轮询器可以监视更多数据。
简而言之,这使 NIO 更具可扩展性。对于每个连接,BIO 需要线程池中的一个线程。NIO 可以维护比 BIO 多得多的连接,并且每个并发处理的请求只需要线程池中的一个线程。
| 归档时间: |
|
| 查看次数: |
2870 次 |
| 最近记录: |