在tomcat中阻塞vs非阻塞主线程

时间:2012-06-11 13:49:38

标签: java multithreading servlets

通常在tomcat中,线程将会运行,当请求进入时,它会将请求服务的责任分配给线程池中的线程。

主要线程在可伸缩性方面是阻塞还是非阻塞是否重要?

2 个答案:

答案 0 :(得分:2)

非阻塞IO具有以下优点:

  • 高度可扩展性:因为没有更多,每个客户端需要一个线程。它可以有效地支持更多的客户。
  • 高度保持活跃:阻止IO需要阻止,直到下一次请求的保持活动时间为止。非阻塞是通知模型,它可以支持高保持活动时间。
  • 高负载下的更好性能因为在阻塞IO中每个连接有一个线程,所以n个连接需要n个线程。随着值n的增加,性能会因为更多线程上下文切换而降低。

答案 1 :(得分:1)

当在tomcat中处理传入请求时,它会将连接分配给其线程池中的线程。

这里重要的是尽可能快地运行线程。您通常在此线程中运行阻止io调用,用于文件io,db等。

您需要调整此线程池apropriatley的大小以处理您的预期流量。

在使用Java EE servlet规范时,您将被迫以每个传入连接方式在一个线程中处理您的请求。

有一些非阻塞框架。查看http://www.playframework.org/和Jetty(Jetty nonblocking by default?