一个 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 核 开多少个 线程 比较合适 ?的更多相关文章

  1. 虚拟机评估——如何确定一个CPU核上部署的虚拟机数量?

    最近研究虚拟化技术,不可避免遇到一个问题:如何评估物理主机上虚拟主机的容量?下面这篇文章的思路有一定的启发性,转发一下. 如何确定一个CPU核上部署的虚拟机数量? 摘要:本文说明一个CPU核上部署虚拟 ...

  2. 【记录一个问题】铁威马NAS存储中的人人影视APP,其WEB服务占满一个CPU核

    终端登录后,top命令发现rrshareweb这个进程把单个CPU核占满了. 发现其实是人人影视的web服务,而这个服务里面我还根本未使用. 卸载这个app后正常.

  3. cpu的核心数及线程关系

    CPU个数.核心数.逻辑CPU个数:一个物理CPU可以有多个核心,一个CPU核就是一个物理线程,由英特尔开发超线程技术可以把一个物理线程模拟出两个线程来使用,使得单个核心用起来像两个核一样,以充分发挥 ...

  4. CPU的核、进程和线程

    转自https://www.cnblogs.com/-new/p/7234332.html 一.CPU与核心 物理核 物理核数量=cpu数(机子上装的cpu的数量)*每个cpu的核心数 虚拟核 所谓的 ...

  5. cpu,核,进程与线程

    多进程与多线程 一张图,先来回顾一下并行,并发,串行: 一.多核多线程 当我们要去买一台新电脑时,我们一般都会比较多台电脑的配置,而其中一项关键配置就是几核几线程.一般现在很多电脑都是4核8线程,甚至 ...

  6. CPU个数、CPU核心数、CPU线程数

    CPU个数.CPU核心数.CPU线程数 我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级.CPU从早期的单核,发展到现在的双核,多核.CPU除了核心数之外,还有线程数之 ...

  7. [转发]CPU个数、CPU核心数、CPU线程数

    我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级.CPU从早期的单核,发展到现在的双核,多核.CPU除了核心数之外,还有线程数之说,下面文本就来解释一下CPU的核心数与 ...

  8. 线程绑定CPU核-sched_setaffinity

    CPU亲合力就是指在Linux系统中能够将一个或多个进程绑定到一个或多个处理器上运行. 一个进程的CPU亲合力掩码决定了该进程将在哪个或哪几个CPU上运行.在一个多处理器系统中,设置CPU亲合力的掩码 ...

  9. CPU、CPU核与线程的关系

    CPU相关概念: CPU:独立的中央处理单元,体现在主板上是有多个CPU的插槽. CPU cores:在每一个CPU上,都可能有多个核(core),每一个核中都有独立的一套ALU.FPU.Cache等 ...

随机推荐

  1. 201621123001《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 关键字:继承,多态,覆盖(Override),重载(Overload),抽象类(abstract)等. 1.2 尝试使用思维导图 ...

  2. cnn 经典网络结构 解析

    cnn发展史 这是imageNet比赛的历史成绩 可以看到准确率越来越高,网络越来越深. 加深网络比加宽网络有效的多,这已是公认的结论. cnn结构演化图 AlexNet 诞生于2012年,因为当时用 ...

  3. YLZ开发外网前端

    YLZ外网前端使用的是boottstrap和layer和validform等插件 表格是用boottstrap的tablle加上框架人员开发的ajaxpageresponse进行协调开发 弹窗使用的l ...

  4. python实现图的遍历(递归和非递归)

    class graph: def __init__(self,value): self.value=value self.neighbors=None # 图的广度优先遍历 # 1.利用队列实现 # ...

  5. 【Python】练习题

    练习1:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中 import os file1_path="e:\\test3\\2.t ...

  6. 对于src路径问题,深层理解的实践。且对于输出流write()两个方法的源码阅读。

    根据昨天的总结,可深层理解图片中src的路径.所以今天实现了一个想法.就是路径写入的是Controller,然后自动去本地找. 其实就是将电脑的本地图片 显示出来.通过输出流的方式. 代码如下: @R ...

  7. TX2-static-dhcp-network

    前言 之前是使用私有的镜像而不是按照nvidia官网中JetPack3.2套件的镜像对TX2板子进行刷机,刷机之后发现网络不能正常连接,即使已经连接了有线网口,经过大师的指点才终于明白了其中的一点点奥 ...

  8. SEGMENTATION FAULT IN LINUX 原因与避免

    https://www.cnblogs.com/no7dw/archive/2013/02/20/2918372.html

  9. go服务运行框架go-svc

    go-svc:https://github.com/judwhite/go-svc/svc go-svc支持linux和windows,应用只需实现Service接口即可. 官方例子 package ...

  10. 20155219实验三 敏捷开发与XP实践

    实验内容 XP基础 XP核心实践 相关工具 敏捷开发与XP 1.敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法."敏捷流程"是一系列价值观 ...