gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:16:37 24 4
gpt4 key购买 nike

这是我的代码:

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

为什么偶尔会有这样的尖峰?那会是什么?我没有在任何地方使用 flock。我怀疑某些库已经覆盖了方法 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 错误?我不知道。

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

关于ruby - 为什么 `File.write` 有时会变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52987672/

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