#node.js #multithreading #process #operating-system #libuv
#node.js #многопоточность #процесс #операционная система #libuv
Вопрос:
Недавно я узнал о потоках пользовательского уровня и потоках уровня ядра в книге Таненбаума «Операционная система». Поскольку потоки пользовательского уровня обрабатываются библиотечными пакетами и поскольку работали с node.js немного, я пришел к выводу, что node.js использует libuv для обработки рабочих потоков и, следовательно, использует потоковую обработку на уровне пользователя.
Но я хотел знать, как node.js рассматривается случай, когда какой-либо рабочий поток выполняет системный вызов, который блокирует, а затем ядро блокирует весь процесс, даже если некоторые потоки способны работать.
Комментарии:
1. Какие системные вызовы, по вашему мнению, блокируют весь процесс, даже другие потоки в процессе?
2. @jfriend00 Если поток вызывает ошибку страницы, ядро, даже не подозревая о существовании потоков, естественным образом блокирует весь процесс до завершения дискового ввода-вывода, даже если другие потоки могут быть запущены. Ошибка страницы вызывает блокировку, поскольку страницу необходимо перенести в память с диска.
3. И когда вы ожидаете, что nodejs будут вызывать ошибки страницы?
4. @jfriend00 как вы думаете, что такое страница? Если вы чувствуете, что я в чем-то не прав, пожалуйста, сообщите. Если вы знаете ответ или есть какая-либо путаница, сообщите. Но мне не нравится этот круговой способ задавать вопросы и отвечать.
5. Вы тот, кто первым использовал «ошибку страницы». Как вы думаете, что это в вашем комментарии? Здесь нет никаких усилий ходить по кругу. Вы, кажется, думаете, что nodejs могут блокироваться на длительные периоды времени, и я пытаюсь заставить вас сказать, как / когда, по вашему мнению, это может произойти? Я никогда не слышал об этом как о проблеме в nodejs на уровне ОС / системы, как вы описываете, поэтому я прошу вас объяснить, почему вы считаете это проблемой? Здесь на вас лежит ответственность за создание четкого вопроса, с которым мы можем попытаться помочь. Поскольку ваш вопрос стоит сейчас, я никогда не слышал, чтобы эта проблема была проблемой в nodejs.
Ответ №1:
Но я хотел знать, как node.js рассматривается случай, когда какой-либо рабочий поток выполняет системный вызов, который блокирует, а затем ядро блокирует весь процесс, даже если некоторые потоки способны работать.
Это не то, что происходит в современной ОС. Только потому, что один поток в процессе выполняет чтение / запись с диска, ОС НЕ блокирует весь процесс от каких-либо действий с другими потоками.
Современное оборудование использует DMA (прямой доступ к памяти) для чтения / записи на диски точно так, чтобы процессор не блокировался, пока блок данных считывается с диска или записывается на диск.