你的应用是这样的:
1. 接收浏览器的请求
2. 多线程地从后端获取数据
3. 把数据给浏览器
你的应用应该来一个请求起一个线程池,还是做一个大池用来响应所有请求?
我做了一点实验,发现两种选择对单个请求的Latency没有什么影响。 不过,为了防止高并发时,过多线程池并存导致过高的总线程数,建议还是使用后者:一个大池响应所有请求。
2013/3/28补充: 看了《JAVA并发编程实践》6.1节,你会更加反对“一个请求一个线程池”机制。
1. 创建新线程需要时间,而且比较可观
2. 线程数据结构会占用内存:除了linux内核中task_struct这个结构,还包括JVM栈中的数据结构,如果-Xss设置的不够大,可能引发JVM栈上的OOM.
3. 线程太多,也带来上下文切换的开销。