加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 为什么`File.write`有时会变慢?

发布时间:2020-12-17 03:10:56 所属栏目:百科 来源:网络整理
导读:这是我的代码: start = Time.nowFile.write('/tmp/a.txt','Hello,world!')puts "Saved in #{Time.now - start}" 在某些情况下,我在日志中看到了这一点: Saved in 0.001Saved in 0.002Saved in 0.245Saved in 0.002 为什么偶尔出现这种飙升?那可能是什么?
这是我的代码:

start = Time.now
File.write('/tmp/a.txt','Hello,world!')
puts "Saved in #{Time.now - start}"

在某些情况下,我在日志中看到了这一点:

Saved in 0.001
Saved in 0.002
Saved in 0.245
Saved in 0.002

为什么偶尔出现这种飙升?那可能是什么?我不是在任何地方使用羊群.我怀疑是某些库已经覆盖了File.write()方法,并在那里添加了一些锁定/同步.可能吗?

更新:似乎Dir.new()经常访问该目录,阻止访问它.

解决方法

似乎Dir.new()在应用程序的另一个地方完全锁定整个目录,并且不允许File.write()快速工作.这是重现问题的测试(使用 threads gem):

require 'tmpdir'
require 'threads'
Dir.mktmpdir do |dir|
  file = File.join(dir,'hey.txt')
  Thread.start do
    loop do
      Dir.new(dir)
    end
  end
  Threads.new(100).assert do
    start = Time.now
    File.open(file,'w+') do |f|
      f.write('test')
    end
    puts("Saved in #{Time.now - start}")
    sleep 1
  end
end

这个会很慢.但是,如果用这个替换Dir.new,一切都会再次快速移动:

`ls #{dir}`.split(' ')

Ruby bug?我不知道.

顺便说一句,Dir.glob()也是如此 – 它也很慢.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读