首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当cpu只支持2时,web应用程序如何支持150个最大线程?

当cpu只支持2时,web应用程序如何支持150个最大线程?
EN

Software Engineering用户
提问于 2017-01-16 20:59:09
回答 2查看 1.8K关注 0票数 -6

做一个lscpu cmd这就是我得到的

代码语言:javascript
复制
$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             2
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 63
Model name:            Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz
Stepping:              0
CPU MHz:               2494.224
BogoMIPS:              4988.44
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              30720K
NUMA node0 CPU(s):     0,1

做数学计算告诉我,它应该能够在给定的时间运行2个线程。

螺纹(S)每芯:1芯(S)每个插座:1插座(芯):2

然而,tomcat配置将最大线程设置为150。

代码语言:javascript
复制
redirectPort="8443" maxThreads="150" acceptCount="15" enableLookups="true"

当cpu只支持2时,web应用程序如何支持150个最大线程?

EN

回答 2

Software Engineering用户

发布于 2017-01-17 05:31:34

有两种线程。运行线程和不运行线程,也就是挂起的线程。

挂起(不运行)线程只是数据结构。是的,这些数据结构必然有指向代码的指针,但它们仍然是所有意义上的数据结构。

挂起的线程可以恢复,然后再一次挂起。不过,挂起的线程只是状态(数据结构)。因此,最终,计算机被限制在挂起的线程中,仅限于其存储状态的容量,状态存储在内存中,也就是说,挂起的线程仅受内存容量的限制(模块化操作系统设计的怪癖/限制)。

相反,运行线程需要支持硬件。我们不能拥有比硬件能力更多的运行线程。

不过,在操作系统(线程调度程序)的监督下,一个正在运行的线程可能会被挂起,然后一个不同的挂起线程继续运行,所有这些都使得看起来比硬件拥有晶体管的“运行”线程更多。

票数 2
EN

Software Engineering用户

发布于 2017-01-16 21:47:14

像Tomcat这样的web服务器对于线程来说是件很棒的事情,因为大多数时候线程什么都不做--例如,它们被阻塞,等待来自网络的请求。是的,单个CPU核心只能在任何给定时刻执行单个线程。但是它也可以非常快地交换掉这个线程并切换到一个新线程。

Tomcat甚至可以在单个核心CPU上旋转那么多线程。好处是,从代码体系结构的角度来看,代码的管理要比让单个线程不断检查是否有任何I/O操作或类似的操作要简单得多。

CPU绑定进程(每个线程都使用一组处理时间)不适合此模型。在这种情况下,CPU将试图快速处理和切换上下文,并且代码运行速度可能比按顺序运行任务慢。

由于JVM与O/S级别的接口,也可以有不同的线程模型。JDK过去支持“绿色线程”(有关更多信息,请参见一些很老的医生 )。在“绿色线程”模型中,将多个Java线程映射到单个本机线程。但是,使用多线程编写Java代码对于像web服务器这样的东西仍然是有意义的,因为任务切换。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/340300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档