Вопрос по asynchronous, node.js, posix – На самом ли деле Node.js использует несколько потоков внизу?

9

После всей литературы, которую я прочитал на node.js, я все еще возвращаюсь к вопросу, использует ли сам node.js несколько потоков под капотом? Я думаю, что ответ да, потому что если мы используем простой пример чтения асинхронного файла, что-то должно делать работу, чтобы прочитать файл, но если основной цикл обработки событий узла не обрабатывает эту работу, то это должно означать, что должен быть поток POSIX выполняется где-то, что заботится о чтении файла, а затем по завершении помещает обратный вызов в цикл обработки событий, который должен быть выполнен. Итак, когда мы говорим, что Node.js выполняется в одном потоке, мы действительно имеем в виду, что цикл обработки событий node.js - это только один поток? Или я что-то здесь упускаю .....

Насколько я понял, порты завершения ввода-вывода и соответствующие концепции на других платформах основаны не на потоках, а на более легком встроенном в ОС. Но я никогда не был уверен, правильно ли я понял это ... Golo Roden

Ваш Ответ

1   ответ
7

there is only one thread.

Если вы ищете технические детали, node.js может использовать потоки для решения асинхронного ввода-вывода, если этого требует базовая операционная система.

Важно никогда не нарушать «есть только одна нить» абстракция к программе Javascript. Если есть больше потоков, все, что они могут сделать, это поставить в очередь работу для основного потока в программе Javascript, они никогда не смогут выполнить любой код Javascript самостоятельно.

Спасибо за разъяснение этого :-)!
@GoloRoden Я думаю, что я был немного расплывчатым в своем ответе, чтобы вызвать путаницу, извините за это. Насколькоuser узла.js (т.е. программист Javascript),the abstraction is that there is only a single thread, В случае базовой среды выполнения (v8) он использует потоки внутри себя, например, для профилирования, и может делать это свободно, если не пропускает эту информацию до Javascript. Другими словами, если вы погрузитесь в реальную среду выполнения, вы обнаружите более одного потока, помогающего поддерживать бесперебойную работу одного потока Javascript.
Знаете ли вы более подробную информацию о & quot; если соответствующая операционная система требует этого & quot ;?
Хорошо, это означает: если операционная система предоставляет безпоточный асинхронный ввод / вывод, для Node.js требуется только один поток, в противном случае может потребоваться больше потоков. Правильно?
@GoloRoden Большинство операционных систем имеют асинхронные вызовы ввода / вывода, для которых не требуется создавать какие-либо потоки для их использования, они сами используют механизмы обратного вызова / порты завершения. Тем не менее, я помню, что Solaris использовал для создания своих собственных потоков и синхронизации ввода-вывода для них & quot; скрытый & quot; внутри асинхронных звонков. Дело было там тоже, код вызова былno idea были ли темы или нет.

Похожие вопросы