Javascript действует многопоточно в Firefox - PullRequest
0 голосов
/ 24 ноября 2018

Все, что я имею в виду в Интернете, указывает на то, что Javascript является однопоточным (кроме веб-работников, которые работают в другом глобальном контексте и не могут напрямую влиять на состояние в основном потоке).Однако, отлаживая некоторый код, я заметил, что даже когда я останавливался на такой-то строке, переменные продолжали изменяться, даже когда я не перешагивал строки кода.Следуя дальнейшему расследованию, я заметил, что, опять же, даже в режиме паузы в отладчике (и я ничего не трогал), журналы регистрировались и ошибки генерировались каждую секунду в соответствии с установленным таймаутом.

IЯ использую ОС: Windows 10 Enterprise, версия 1803, сборка ОС 17134.407.Я столкнулся с проблемой в Firefox 63.0.1 (64-разрядная версия).Однако когда я попробовал его в Chrome 70.0.3538.102 (Официальная сборка) (64-разрядная версия), проблема не возникла - пауза в отладчике, как и ожидалось, приостановила все вычисления.

Не могупредоставьте любой полезный код, потому что: 1. это код компании, и 2. это проблема стиля многопоточности, из-за которой очень трудно сузить область доступа к какой-либо части кода.Вещи, которые могут иметь отношение к делу, помимо вышеупомянутых различий в браузере: это приложение AngularJS, предоставляемое браузеру из NodeJS.Мы используем соединения $interval(), timeout(), $http и Stomp.

Насколько я понимаю, такое многопоточное поведение должно быть невозможным.Как это могло произойти?

1 Ответ

0 голосов
/ 02 декабря 2018

Nodejs на самом деле не является однопоточным.Он состоит в основном из двух частей:

  • Часть Javascript.В основном процессы цикла событий (однопоточные).
  • C ++ часть (библиотека libuv), благодаря V8.Эта часть реализует пул потоков с несколькими потоками для вычисления дорогостоящих операций.Таким образом, мы не блокируем цикл обработки событий.

Итак, возможно, вы можете проверить все модули, которые вы используете, и проверить их реализацию.Любой, кто реализован в C ++, использует пул потоков в фоновом режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...