Что произойдет, если в процессе произойдет сбой одного потока?
У меня два нубских вопроса:
1) Почему node.js запускается в одном потоке? почему бы просто не использовать сам процесс? ИЛИ Каковы преимущества запуска в потоке вместо процесса?
2) Что произойдет, если в процессе произошел сбой потока (я знаю, что необработанное исключение приведет к завершению процесса), но что произойдет, если его правильно перехватить? или с исключениями, такими как исключения с плавающей точкой. будет ли процесс тоже вылетать?
3 ответа
Я думаю, вы немного озадачены тем, что в данном случае означает "однопоточный". Сам Node.js использует несколько потоков в фоновом режиме для обработки блокирования вызовов в асинхронном режиме.
Ядро Node.js, движок JavaScript, является однопоточным. Отсутствие многопоточности и наличие цикла обработки событий значительно облегчают программирование. Короче говоря, вам не нужно иметь дело со всеми проблемами параллелизма, которые приносит многопоточность, ваш код в этом случае намного более детерминирован.
В случае сбоя потока совершенно не имеет значения, был ли он единственным или одним из многих, если сбой кода - лучшее, на что вы можете надеяться, это то, что программа умрет с ним, нет ничего более неприятного, чем продолжение продолжения работы вашей программы. частично испорченное состояние. Представьте себе, что сбойный поток был ответственен за сохранение данных на диск, и теперь ваша программа продолжает работать без повторного сохранения.
- node.js очень легок и вызывается только при необходимости. Таким образом, каждый поток обрабатывает один запрос, а затем завершается. Если вы позвоните / mypage, node.js обработает запрос, а затем прекратит работу. Это приводит к повышению производительности при сохранении небольшой площади
- Если есть исключение, и оно правильно обработано, оно выдаст ошибку в соответствии с тем, как вы его определили. Javascript - это язык "все или ничего". Любая ошибка приведет к тому, что javascript выдаст ошибку и произойдет сбой, поэтому вам необходимо убедиться, что вы обрабатываете все возможные ошибки.
Запуск программы в процессе или однопоточном - это то же самое. Каждый процесс имеет основной поток. В зависимости от языка программирования и платформы, дополнительные потоки могут использоваться для одновременного запуска частей вашей программы. Node.js не имеет возможности запускать дополнительные темы.
Таким образом, у вас нет возможности запускать части вашей программы параллельно, кроме запуска новых процессов. Несколько потоков в одном процессе совместно используют одну и ту же память, а процессы - нет. Когда вам нужно обмениваться информацией между процессами, вы должны использовать передачу сообщений.
Недостаток передачи сообщений заключается в том, что она медленнее, чем обмен информацией через память. Преимущество заключается в том, что вам не нужно рассуждать об изменчивом состоянии объектов в вашей памяти и о том, как обеспечить, чтобы эти объекты не стали несовместимыми.