一个 CPU 核 开多少个 线程 比较合适 ?
一个 CPU 核 开多少个 线程 比较合适 ?
这是一个 线程池 的 问题 。
我之前也 反对 过 线程池, 因为我认为 线程池 影响了 对 用户 的 实时响应性 。
我也认为, 分时 (对 CPU 资源的分配) 应该由 操作系统 来做就行, 不需要 再 画蛇添足 。
不过, 现在 主流的应用 好像都在用 线程池 , 比如 Asp.net ,对每个请求的处理, 好像是放到 线程池 里执行的, 所以 经常可以看到这样的现象, Asp.net 里 处理请求的 线程 的 线程号 是 重复的, 比如 处理 第一个请求 的 线程号 是 2, 处理 第三个请求 的 线程号 也是 2 , 处理 第 n 个请求, 第 x, y, z 个请求 的 线程号 也是 2 …… 。
所以, 考虑到 创建线程 的 性能花费 还是 挺可观 的, 算了, 还是 随大流 吧 。 我们也用 线程池 。
不过 “创建线程 的 性能花费 还是 挺可观 的” 这是 据说, 我没有具体去研究过 。
我之前写过一篇文章 《自己实现一个线程池》 https://www.cnblogs.com/KSongKing/p/9803935.html , 可以看看 。
接下里进入主题, 一个 CPU 核 开多少个 线程 比较合适 ?
如果我们写过 从网页上抓取内容 的 程序, 就会有一些经验 :
比如, 当 线程 开到 100 个 以上时, 效率 不升反降; 而 100 个线程 的 效率 和 60 个线程 一样, 60 个线程 和 40 个 也差不多 。
So ……
我的 CPU 是 2 核 4 线程, 所以这样评估下来的话, 1 个 核 开 10 ~ 20 个 线程 差不多 。
这个 核 没有算 超线程, 超线程 大概可以算 半个 核, 大家可以自己评估一下 。 哈哈哈
之前在 QQ 群 里讨论相关问题时, 有网友说, “线程切换 …… 一个 yield 下来, 就是 15 毫秒(ms) 。”
这个 yield 是什么意思, 我不知道, 你们去问他吧 …… 哈哈哈哈
有 网友说 “像 云平台 的 对象存储 一样, 一个 CPU(核)开一个 线程 就行了”,
这是 一种 理想状况 。
对于 一般的 业务系统, 普遍的有 等待 其它进程 的 操作, 比如 等待 IO, 等待 数据库 返回结果 。
所以, 通常 根据 自己的 应用 的 实际情况,可以有一个 在 多数情况下的 最优解, 即 最优 线程池 Size 。
自己应用 的 实际情况, 是指 用户量(并发量) 数据库等待时间 IO 等待时间 等 。
根据这些 可以 评估出一个 适当的 线程池 Size 。
有 网友 问, “有算法吗?”
我 临时 拼凑了 一个 算法, 如果 并发量 是 每秒 200 个, 数据库 等待 的 平均时间 是 10 毫秒, 这样 理论上, 1 个线程 1 秒钟 可以处理 1秒 / 10 毫秒 = 100 个请求, 即 100 个 请求 / 秒 。
那么, 200 个 请求 的话 就需要 200 / 100 = 2 个线程,
当然, 这是 在 1 秒 内 轮流执行的, 最坏 的 情况 用户 需要 等待 1 秒 。
可以 再适当的 增加一些 线程数量 来 提高 并发水平,
比如 增加到 5 个 线程, 这样 最坏的情况 用户 只需要等待 1/5 秒 = 0.2 秒 。
一个 CPU 核 开多少个 线程 比较合适 ?的更多相关文章
- 虚拟机评估——如何确定一个CPU核上部署的虚拟机数量?
最近研究虚拟化技术,不可避免遇到一个问题:如何评估物理主机上虚拟主机的容量?下面这篇文章的思路有一定的启发性,转发一下. 如何确定一个CPU核上部署的虚拟机数量? 摘要:本文说明一个CPU核上部署虚拟 ...
- 【记录一个问题】铁威马NAS存储中的人人影视APP,其WEB服务占满一个CPU核
终端登录后,top命令发现rrshareweb这个进程把单个CPU核占满了. 发现其实是人人影视的web服务,而这个服务里面我还根本未使用. 卸载这个app后正常.
- cpu的核心数及线程关系
CPU个数.核心数.逻辑CPU个数:一个物理CPU可以有多个核心,一个CPU核就是一个物理线程,由英特尔开发超线程技术可以把一个物理线程模拟出两个线程来使用,使得单个核心用起来像两个核一样,以充分发挥 ...
- CPU的核、进程和线程
转自https://www.cnblogs.com/-new/p/7234332.html 一.CPU与核心 物理核 物理核数量=cpu数(机子上装的cpu的数量)*每个cpu的核心数 虚拟核 所谓的 ...
- cpu,核,进程与线程
多进程与多线程 一张图,先来回顾一下并行,并发,串行: 一.多核多线程 当我们要去买一台新电脑时,我们一般都会比较多台电脑的配置,而其中一项关键配置就是几核几线程.一般现在很多电脑都是4核8线程,甚至 ...
- CPU个数、CPU核心数、CPU线程数
CPU个数.CPU核心数.CPU线程数 我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级.CPU从早期的单核,发展到现在的双核,多核.CPU除了核心数之外,还有线程数之 ...
- [转发]CPU个数、CPU核心数、CPU线程数
我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级.CPU从早期的单核,发展到现在的双核,多核.CPU除了核心数之外,还有线程数之说,下面文本就来解释一下CPU的核心数与 ...
- 线程绑定CPU核-sched_setaffinity
CPU亲合力就是指在Linux系统中能够将一个或多个进程绑定到一个或多个处理器上运行. 一个进程的CPU亲合力掩码决定了该进程将在哪个或哪几个CPU上运行.在一个多处理器系统中,设置CPU亲合力的掩码 ...
- CPU、CPU核与线程的关系
CPU相关概念: CPU:独立的中央处理单元,体现在主板上是有多个CPU的插槽. CPU cores:在每一个CPU上,都可能有多个核(core),每一个核中都有独立的一套ALU.FPU.Cache等 ...
随机推荐
- CodeForces - 780C Andryusha and Colored Balloons(dfs染色)
Andryusha goes through a park each day. The squares and paths between them look boring to Andryusha, ...
- 写的一个ORACLE存储过程小练习
CREATE OR REPLACE PROCEDURE PRO_1112(O_NOTE OUT NUMBER,O_RESULT OUT VARCHAR2)ASV_NO NUMBER(20);V_NOT ...
- 使用FileResult导出Excel数据文件
用的是Html拼接成Table表格的方式,返回 FileResult 输出一个二进制的文件. 第一种:使用FileContentResult // 通过使用文件内容,内容类型,文件名称创建一个File ...
- mybatis-generator没有自动生成代码和Junit测试controller
本来mybatis的generator想要自动生成增删改的,但是到后来语句就两个select,原因是数据中没有给字段加primary,就不会有删改增. 以及Controller的Junit测试 先导入 ...
- Strict Standards: Declaration of UserModel::toJSON() should be compatible with that of BaseModel::toJSON()
使用php报了这个错误: 错误的意思是: 严格标准: usermodel中的 toJSON() 方法 应该 同 BaseModel中的toJson() 方法是兼容的. php要求 子类的方法如果同父 ...
- 惊不惊喜, 用深度学习 把设计图 自动生成HTML代码 !
如何用前端页面原型生成对应的代码一直是我们关注的问题,本文作者根据 pix2code 等论文构建了一个强大的前端代码生成模型,并详细解释了如何利用 LSTM 与 CNN 将设计原型编写为 HTML 和 ...
- 搭建VUE项目
1.换源由于npm源服务器在国内访问速度较慢,所以一般需要更换源服务器地址npm config set registry https://registry.npm.taobao.org也可以安装cnp ...
- python 基础 内置函数 和lambda表达式
1.把任意数值转化为字符串有两种方法. (1)str()用于将数值转化为易于人读的形式.print(str("我是中国人"))>>>我是中国人 (2)repr() ...
- 【转载】 Pytorch(0)降低学习率torch.optim.lr_scheduler.ReduceLROnPlateau类
原文地址: https://blog.csdn.net/weixin_40100431/article/details/84311430 ------------------------------- ...
- php算法面试案例(转)
有5个人偷了一堆苹果,准备在第二天分赃.晚上,有一人遛出来,把所有菜果分成5份,但是多了一个,顺手把这个扔给树上的猴了,自己先拿1/5藏了.没想到其他四人也都是这么想的,都如第一个人一样分成5份把多的 ...