😎
[Bug #21119] CPU を消費するスレッドがある場合に Dir.glob の処理が必要に遅くなるバグ報告
[Bug #21119] Programs containing Dir.glob
with a thread executing a CPU-heavy task run very slowly.
- CPU を大量に消費するスレッドがある場合に
Dir.glob
の処理が必要に遅くなるバグ報告 - チケットだと以下のようなコードが提示されているんですが Ruby 3.3.6 だと 2.2秒で完了するのに対して Ruby 3.4.1 だと 119.43秒もかかるようになっているみたいです
# Launch a thread to execute CPU-heavy task
Thread.new do
loop do
arr = []
100.times do
arr << rand(1...100)
end
end
end
# Execute a program containing `Dir.glob` in the main thread.
10.times do
Dir.glob('*')
puts "aaaa"
end
- これは Ruby 3.4 から
Dir.glob
が GVL を頻繁に開放するようになったのが起因みたいですね? - 単純に変更するのも難しいみたいでこれ自体はまだ未対応になっています
Discussion