应该来一个请求起一个线程池,还是做一个大池用来响应所有请求?

你的应用是这样的:

   1. 接收浏览器的请求

   2. 多线程地从后端获取数据

   3. 把数据给浏览器

你的应用应该来一个请求起一个线程池,还是做一个大池用来响应所有请求?

我做了一点实验,发现两种选择对单个请求的Latency没有什么影响。 不过,为了防止高并发时,过多线程池并存导致过高的总线程数,建议还是使用后者:一个大池响应所有请求。

2013/3/28补充: 看了《JAVA并发编程实践》6.1节,你会更加反对“一个请求一个线程池”机制。

   1. 创建新线程需要时间,而且比较可观

   2. 线程数据结构会占用内存:除了linux内核中task_struct这个结构,还包括JVM栈中的数据结构,如果-Xss设置的不够大,可能引发JVM栈上的OOM.

   3. 线程太多,也带来上下文切换的开销。

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.