在Tomcat中设置NIO连接器后,我们有N个池线程和M个工作线程。
设置BIO连接器后,线程池中可以有N * M个线程。那么,两个连接器之间有什么区别?
答案 0 :(得分:0)
在BIO中,每个新连接都会从连接器线程池中分配一个线程,并且该线程将一直分配给该连接,直到该连接关闭。这意味着线程在两次请求之间的空闲时间很长(例如,在HTTP保持活动状态)。
在NIO中,每个新连接都传递给Poller。当连接上有要处理的数据时,将通知Poller线程。然后,轮询器从连接器线程池中为连接分配一个线程,并且该线程将一直分配给该连接,直到已读取/写入所有数据为止。然后将连接传递回Poller,以便Poller可以监视更多数据。
简而言之,这使NIO更具可扩展性。 BIO要求每个连接在线程池中有一个线程。 NIO可以维持比BIO更多的连接,并且每个并发处理的请求在线程池中仅需要一个线程。