异步写入多个文件

时间:2015-11-01 16:08:13

标签: node.js

在尝试理解事件循环时,我写了一个快速片段来测试我的假设。毫不奇怪,他们错了!

import fs from 'fs'

let bufferA = new Buffer(1e+9)
bufferA.fill(0)

let bufferB = new Buffer(1e+0)
bufferB.fill(0)

let fileA = fs.openSync('fileA', 'w')
let fileB = fs.openSync('fileB', 'w')

fs.write(fileA, bufferA, 0, bufferA.length, (err) => { console.log(err || 'wroteA')})
console.log('Started writing to A..')
fs.write(fileB, bufferB, 0, bufferB.length, (err) => { console.log(err || 'wroteB')})
console.log('Started writing to B..')

我希望两个文件都是异步写入的(即fileB先完成),但输出如下:

Started writing to A..
Started writing to B..
wroteA
wroteB 

显示wroteA之前的延迟。因此,虽然fs.write似乎与我的代码异步操作(即,首先写入日志),但似乎一次只能写一个文件?

1 个答案:

答案 0 :(得分:1)

Ben Noordhuis on the GitHub issue you opened for this

  

Libuv序列化OS X上的磁盘写入,因为记录了一个令人讨厌的怪癖here。可能更新的OS X版本更好,但尚未经过测试。

Node.js将libuv用于文件I / O之类的东西。所以...它是序列化的,但(至关重要的是)不会阻止事件循环。所以fileA可能阻止写入fileB,但不是所有其他JS的东西。仅限OS X.