Я только что обнаружил модуль worker_threads в Node.js, и он выглядит многообещающим!
Вопрос: Интересно / эффективно комбинировать worker_threads с кластером или созданные потоки автоматически распределяются по разным ЦП машины? И в этом случае есть способ узнать родство нити?
Я не встречал ничего, что упоминало бы сходство в документах - я предполагаю, что это еще один поток уровня ОС, и планировщик ОС позаботится о том, на каком процессе он работает.
Я тестировал (на Vagrant с настройкой нескольких процессоров).
Я использовал top
для мониторинга использования процессора при работе нескольких потоков (если процент превышает 100%, это будет означать, что используются несколько процессоров / ядер.
результат:
ЦП: 4, рабочие потоки: НЕТ, кластер: НЕТ, максимальный% ЦП 122
ЦП: 4, рабочие потоки: НЕТ, кластер: ДА, максимальный% ЦП 115 + 105 (два процесса)
ЦП: 4, рабочие потоки: ДА, кластер: НЕТ, максимум% ЦП 257 (для 2 потоков)
ЦП: 4, рабочие потоки: ДА, кластер: ДА, максимальный% ЦП 122 + 127 (для 2 потоков в 2 процессах)
Из этих тестов я пришел к выводу, что потоки используют несколько процессоров / ядер, когда они доступны. Таким образом, производительность рабочих потоков не улучшится при использовании кластера.