【问题标题】:ruby memory usage grows forever when use thread使用线程时,ruby 内存使用量永远增长
【发布时间】:2011-10-20 01:51:58
【问题描述】:

操作系统:Windows7 32 位 主存:4GB ruby -v : ruby​​ 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32]

# big.mkv file size : 1.45GB

ex1.rb

puts $$

File.open("D:/test/big.mkv", "rb") do |f|
  while buff = f.read(4096)
  end
end

sleep 1000

ex1.rb 没问题!!内存使用量约为 19,756 KB。

但是……

ex2.rb

puts $$

th1 = Thread.new do
  loop do
    sleep 1
  end
end

File.open("D:/test/big.mkv", "rb") do |f|
  while buff = f.read(4096)
  end
end

th1.join

ex2.rb 内存使用量不断增加...毕竟 1,937,948 KB

我必须使用线程.. 请..帮帮我!!

【问题讨论】:

  • 请使用空格将您的代码格式化为代码。
  • 好吧,你的话题永远不会结束,所以join 可能需要一段时间。
  • 他的问题很清楚不是吗?即使线程永远不会结束,内存使用量也不应该增长,那为什么呢?
  • 我用ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]测试了这段代码,我的内存使用量根本没有增加。也许这是下一个版本中修复的内存泄漏。

标签: ruby


【解决方案1】:

在 ruby​​ 1.9 中有文件读取修复。我编写的一个读取大量数据的脚本在 ruby​​1.9 上运行速度提高了约 100 倍。如果可能,请升级,这是值得的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 2017-11-09
    • 2013-04-17
    • 1970-01-01
    • 2013-10-08
    相关资源
    最近更新 更多