Вход в файл в Node.js: Безопасен ли он с помощью кластеров?

Если у меня есть 4, 8 или более потоков и кластеров на одном ящике с этим кодом, может ли быть конфликт ресурсов над файлами журналов/файловыми машинами? Если да, можете ли вы опубликовать пример, который иллюстрирует? Пока все тесты, которые я сделал, показывают, что данные записи не будут переплетаться и не будут отброшены, но я не уверен на 100%.

Спасибо!

var errLog = fs.createWriteStream(... + '/error.log');
GLOBAL.dbLog = fs.createWriteStream(... + '/db.log');
+4
источник поделиться
1 ответ

Отсутствует координация потоков или кластеризованных процессов, поэтому возникает вопрос, позволит ли ОС разрешить несколько открытых потоков записи в файл. Флаги C по умолчанию для CreateWriteStream: O_WRONLY || O_CREAT || O_TRUNC. Это указывает на первую проблему - все процессы будут создавать новый усеченный файл (если возможно, вы хотели добавить).

Предположим, что вы указываете w+ как флаг при создании потока...

Для Linux этот связанный вопрос указывает, что вы будете в порядке, если количество байтов меньше байтов PIPE_BUF (4096 на Linux, 512 на некоторых других Unix).

Я не уверен, что ответ на Windows.

+4
источник

Посмотрите другие вопросы по меткам или Задайте вопрос