zoukankan      html  css  js  c++  java
  • 一个 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  秒 。

     

     

  • 相关阅读:
    VMware Workstation Pro 12 创建虚拟机(安装Ubuntu)
    老师的题目(开心一刻)
    政务私有云盘系统建设的工具 – Mobox私有云盘
    学校信息化分享-中小学怎样快速完成教学资源库的建设
    SpringBoot 2.x 文件上传出现 The field file exceeds its maximum permitted size of 1048576 bytes
    nginx错误集
    nginx做http强制跳转https,接口的POST请求变成GET
    swagger Base URL地址和下边的不一致
    CentOS7关闭防火墙
    nginx配置:静态访问txt文件
  • 原文地址:https://www.cnblogs.com/KSongKing/p/10211231.html
Copyright © 2011-2022 走看看