ruby-concurrency / ruby-concurrency/concurrent-ruby
concurrent-ruby-edge Channel.select consumes full(single core) cpu
未关闭
还没有人认领这个 Issue。
- 主要语言
- Ruby
- 星标
- 5.8k
- 派生
- 420
- 平均合并
- 20 小时 45 分钟
- 30 天内合并 PR
- 4
描述
* `concurrent-ruby` version: 1.1.7
* `concurrent-ruby-edge` used: yes
I am running this simple code and I see that select is not blocking on the channels and instead always looping which consumes full(single core) CPU.
require 'concurrent-edge'
Channel = Concurrent::Channel
string1 = Channel.new
string2 = Channel.new
loop do
Channel.select do |s|
s.take(string1) {
puts "string1"
}
s.take(string2) {
puts "string2"
}
end
end
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
Start by running the supplied concurrent-ruby-edge reproduction and then trace the Channel.select entry point and its channel-waiting behavior. Done means select blocks when both channels are empty and the loop no longer consumes a full CPU core, while still handling values sent to either channel.
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- ruby
- 领域
- backend
- Issue 类型
- 缺陷
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100