Пул потоков, как когда и кто использовал:
Во-первых, когда мы используем / устанавливаем Node на компьютер, он запускает процесс среди других процессов, который называется процессом узла на компьютере, и продолжает работать, пока вы его не убьете. И этот запущенный процесс - это наш так называемый одиночный поток.
Таким образом, механизм однопоточности позволяет легко заблокировать приложение узла, но это одна из уникальных функций, которые Node.js привносит в таблицу. Итак, опять же, если вы запустите приложение узла, оно будет работать только в одном потоке. Независимо от того, есть ли у вас 1 или миллион пользователей, одновременно обращающихся к вашему приложению.
Итак, давайте точно поймем, что происходит в единственном потоке nodejs, когда вы запускаете свое приложение node. Сначала инициализируется программа, затем выполняется весь код верхнего уровня, что означает все коды, которые не находятся внутри какой-либо функции обратного вызова ( помните, что все коды внутри всех функций обратного вызова будут выполняться в цикле событий ).
После этого выполняется весь код модулей, затем регистрируются все обратные вызовы, и, наконец, запускается цикл обработки событий для вашего приложения.
Итак, как мы обсуждали ранее, все функции обратного вызова и коды внутри этих функций будут выполняться в цикле событий. В цикле событий нагрузки распределяются по разным фазам. В любом случае, я не собираюсь здесь обсуждать цикл событий.
Что ж, для лучшего понимания пула потоков я прошу вас представить, что в цикле событий коды внутри одной функции обратного вызова выполняются после завершения выполнения кодов внутри другой функции обратного вызова, теперь, если есть некоторые задачи, на самом деле слишком тяжелые. Затем они заблокировали бы наш единственный поток nodejs. Итак, здесь появляется пул потоков, который, как и цикл событий, предоставляется Node.js библиотекой libuv.
Таким образом, пул потоков не является частью самого nodejs, он предоставляется libuv для переноса тяжелых задач на libuv, и libuv будет выполнять эти коды в своих собственных потоках, а после выполнения libuv вернет результаты событию в цикле событий.
Пул потоков дает нам четыре дополнительных потока, которые полностью отделены от основного потока. И мы действительно можем настроить его до 128 потоков.
Таким образом, все эти потоки вместе образуют пул потоков. а затем цикл обработки событий может автоматически выгружать тяжелые задачи в пул потоков.
Самое интересное, что все это происходит автоматически за кулисами. Не мы, разработчики, решаем, что будет попадать в пул потоков, а что нет.
В пул потоков поступает много задач, например
-> All operations dealing with files
->Everyting is related to cryptography, like caching passwords.
->All compression stuff
->DNS lookups