gpt4 book ai didi

ruby-on-rails - 是否有可能在多个内核中运行单个 Sidekiq 进程?

转载 作者:太空宇宙 更新时间:2023-11-03 18:03:03 26 4
gpt4 key购买 nike

我在 MRI/YARV Ruby 2.4.6 中使用 Sidekiq。根据 MRI GIL 限制,我预计每个 Sidekiq 进程将仅限于一个核心。但似乎线程在不同的内核中运行,即使只启动了一个 Sidekiq 进程也是如此。

这是运行后的 htop 截图:bundle exec sidekiq -c 3 -L sidekiq.log -r ./worker.rb

https://user-images.githubusercontent.com/4698528/63443969-1c012700-c40c-11e9-85ee-9c4298c98c89.png

*正在使用3个核心

我读到 MRI 可以利用 OS pthreads 在不同的内核中运行一个进程。这是怎么回事?这是否会改变常见策略,例如运行多个 Sidekiq 进程以使用所有处理器容量?

  • ruby :2.4.6
  • sidekiq:5.2.7
  • 操作系统:在 ubuntu 18.04.3 主机上的 vbox 中运行的 ubuntu 18.04.3 服务器

最佳答案

我怀疑这是由 htop + 你的 CPU 调度程序的一些怪癖引起的报告问题;由于 GIL,MRI 应该只能使用 1 个核心 值(value) 的 CPU,但 CPU 调度程序不一定需要将其限制为单个逻辑核心;调度程序认为合适时,执行可能会分布在多个内核上。

你可以简单地观察一下:

ruby -e "while(1) do end" &; PID=$!; watch -n 1 ps --pid $PID -o psr; kill $PID

当您观看此视频时,您会看到进程运行的 CPU 内核随时间而变化,但使用率保持在 100% 不变。

在 htop 中查看:

ruby -e "4.times.map{Thread.new{while(1) do end}}.map(&:join)" &; PID=$!; htop -p $PID ; kill $PID

您会注意到,在 htop 中,即使您的 Sidekiq 进程报告使用了 50% 的 CPU,htop 的整体 CPU 显示显示这些内核的利用率仅为 ~30%(总和为 ~100%!)

关于ruby-on-rails - 是否有可能在多个内核中运行单个 Sidekiq 进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57679589/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com