Я провел большое исследование по этой теме «цикла обработки событий», который выполняет асинхронный ввод-вывод с использованием одного потока.Насколько я понимаю, например, код nodeJS выполняется в однопоточном окружении, но передает параллельные потоки за кулисы.Это означает, что все выполняется одновременно, за исключением кода и интерпретатора, который просто передает задания и управляет обратными вызовами однопоточным способом.
Мой вопрос касается конкретно IO в Windows и ThreadPool, особенно файлового IOи база данных читает / пишет.Обычно в среде .NET, которая использует многопоточность, вы можете увидеть это:
lock(sync)
{
// do some IO
}
Для защиты определенных функций от проблем параллелизма, например, двух потоков, пытающихся сохранить записи в одной и той же таблице или файле sql.
Мой вопрос двоякий,
1) Когда nodeJS говорит, что выполняет «асинхронный ввод-вывод», означает ли это, что он фактически выполняет запись в базу данных или файл одновременно ?Я думаю, что это было бы до базового устройства / операционной системы, а не nodeJS, но я пытаюсь уточнить.
2) Если некоторые операции ввода-вывода должны быть или, по крайней мере, должны быть атомарными (не выполняются одновременно), чем может помочь «Асинхронный ввод-вывод»?Разве не может быть бесполезно порождать потоки для выполнения ввода-вывода, если вам просто все равно придется блокировать () многие из этих операций?