跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 如何降低计算密集线程的 CPU 占用率?
未分類
2 4 月 2020

如何降低计算密集线程的 CPU 占用率?

如何降低计算密集线程的 CPU 占用率?

資深大佬 : ybw 58

在系统的默认调度策略下,这个线程会占满一个核心,直到它做完工作。

有没有办法让这个线程的 CPU 占用率始终保持在某个数值之下,比如不得超过 60%。

大佬有話說 (38)

  • 資深大佬 : BingoXuan

    nc 设置优先级?

  • 資深大佬 : augustheart

    让出时间片啊,但是要达到具体的效果得自己手动测试阈值了。我记得看过一本微软的人写的书,网名字了,他们让实习生拿 cpu 占用表画波形图玩。

  • 資深大佬 : hmzt

    sleep, 现在电脑这么多核, 占满一个又怎么了

  • 資深大佬 : liuxey

    cpulimit

  • 主 資深大佬 : ybw

    @augustheart 这不叫测试阈值,而是猜阈值,有运气成分在里面

  • 主 資深大佬 : ybw

    @hmzt 多线程程序,如果有 3 个这种线程,那就是 3 个核。有可能让别的程序卡死。

  • 資深大佬 : augustheart

    @ybw 老哥你真严格……

  • 資深大佬 : tigerstudent

    @augustheart 好像是《编程之美》?

  • 資深大佬 : tigerstudent

    每执行完一些任务就 sleep 一下

  • 資深大佬 : wdf86

    cgroup 试试

  • 資深大佬 : augustheart

    @tigerstudent 好像就是这本书

  • 資深大佬 : jasonyang9

    什么平台?有 systemd ?有的话用 slice,一个配置档就成了

  • 主 資深大佬 : ybw

    @jasonyang9 Mac

  • 資深大佬 : icyalala

    用 setaffinity 不停切换绑定的 CPU。。
    但你这么搞,Cache 和分支预测之类的会不断失效,总 CPU 消耗反而会提升非常多。。

  • 資深大佬 : cloudyplain

    cputhrottle

  • 資深大佬 : lishulong

    1. 首先要明确的是降低 cpu 占用率目的?是为了提升系统的性能、还是单纯的想限制 cpu 的利用率。
    2. 计算密集型系统区别于 io 密集型,对于计算密集型的,在无法优化系统代码层面的情况下,最直接的方式就是提升 cpu 的核数
    3. 单纯的降低单进程单线程的 cpu 占用率,程序层面会很难操纵吧。
    1. 多进程开发,单进程单线程跑 100%,多核均摊计算充分利用多核来达到”降低 cpu 的占用率”,
    2. `使用 docker 将服务容器化–cpus 参数限制该服务使用的 cpu 核数`
    4. 为了提升系统的性能,主要是针对耗费 cpu 的一些计算来进行优化
    1. 正则,一定要预编译
    2. 不必要的运算,比如 潜在的 for 循环计算重复的计算任务,
    3. NPE
    4. 异步任务最好池化

  • 資深大佬 : wangyzj

    @augustheart 编程之美——微软技术面试心得

  • 資深大佬 : wangyzj

    cgroup 吗?
    单纯的为了限制没意义把
    计算密集型不就是为了把 cpu 干满么

  • 資深大佬 : happy7902

    你的问题就是伪命题,看似很有道理,实则是没什么常识的。一个线程同一时刻只能用一个 core 计算,理论上只有多线程才能占满所有 cpu。另外你想这个 cpu 占用率控制在 60% 你想让另外 40 睡眠吗? 调度算法会这么傻吗。或者你应该换个更加强大的 cpu 他的利用率自然会下来。在 linux 上 cgroup 可以解决你这些奇葩需求,限制 cpu 核心,占用率 网络带宽 io 带宽等

  • 主 資深大佬 : ybw

    @wangyzj 比起占满系统资源从而 3 分钟完成任务,我更想要占用低资源,从而 10 分钟完成任务。

  • 資深大佬 : star00

    为什么要限制 cpu,cpu 不够加机器啊

  • 主 資深大佬 : ybw

    @happy7902 我就是想让剩下的 40 空闲,以便其他程序使用。

  • 資深大佬 : wangyzj

    @ybw 多核的话你得代码层面拆分线程也许能做得到

  • 資深大佬 : star00

    “线程会占满一个核心,直到它做完工作” ? 对这句话有点疑问。 现在的操作系统执行任务不是分时间片的吗? 如果有多个线程。一个线程执行一个时间片后,它们不会重新争夺 cpu 吗? 为什么这个线程会占满一个核心,直到它做完工作。 我也不太懂,只是有点疑问。

  • 主 資深大佬 : ybw

    @star00 这只是我对实际观察到的现象的描述。

  • 資深大佬 : ddup

    Thread.Sleep(1000)

  • 資深大佬 : sagaxu

    第一句话就是错的,CPU 密集型线程,在调度时会受到一定惩罚,实际优先级低于同静态优先级的 IO 密集型线程。其它线程不但有机会运行,还更优先。

  • 資深大佬 : pmispig

    搞个 docker 就行了

  • 主 資深大佬 : ybw

    @sagaxu 不多说了,cpux.net

  • 資深大佬 : lambdaq

    买主频更高的 cpu ?

  • 資深大佬 : opengps

    sleep(10),让出 10 毫秒间隔

  • 資深大佬 : cigarzh

    “在系统的默认调度策略下,这个线程会占满一个核心,直到它做完工作。”

    哪个 OS 的啥 Scheduler 这么傻逼?

  • 資深大佬 : augustheart

    @sagaxu 至少从 windows 的内核来说,是没有这个说法的。

  • 資深大佬 : sagaxu

    @augustheart Windows NT-based operating systems use a multilevel feedback queue. 32 priority levels are defined, 0 through to 31, with priorities 0 through 15 being “normal” priorities and priorities 16 through 31 being soft real-time priorities, requiring privileges to assign. 0 is reserved for the Operating System. Users can select 5 of these priorities to assign to a running application from the Task Manager application, or through thread management APIs. The kernel may change the priority level of a thread depending on its I/O and CPU usage and whether it is interactive (i.e. accepts and responds to input from humans), raising the priority of interactive and I/O bounded processes and lowering that of CPU bound processes, to increase the responsiveness of interactive applications.[9] The scheduler was modified in Windows Vista to use the cycle counter register of modern processors to keep track of exactly how many CPU cycles a thread has executed, rather than just using an interval-timer interrupt routine.[10] Vista also uses a priority scheduler for the I/O queue so that disk defragmenters and other such programs do not interfere with foreground operations.

  • 資深大佬 : windyland

    实际上调低优先级就可以了

  • 資深大佬 : augustheart

    @sagaxu 这个说法我倒是没注意到。我推敲一下。
    无论核心编程还是深入解析我好像都没有看到过有提到会特意将 cpu 密集型降低优先级的说法(实际上在我看来这个也无从判断,只能通过时间片的占用情况才能判断)。我再翻翻书,也可能我跳过了某句话。

  • 資深大佬 : BB9z

    应用限制?比如 App Tamer、AppPolice。

  • 資深大佬 : zado

    调低优先级就可以了,强行控制 CPU 占有率可以做到,如果想要控制精确一点还非常复杂,费力不讨好。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具