Однопоточная концепция JavaScript работает в браузере

Из главы 3 книги Секреты JavaScript ниндзя от Jon Resig взята следующая цифра. Здесь автор объясняет цикл событий браузера.

enter image description here

Книга должна сказать следующее:

Важно отметить, что механизм браузера, который помещает события в очередь внешняя по отношению к этой модели цикла событий. Обработка необходимо определить, когда произошли события, и нажать их на очередь событий не участвует в потоке, который обрабатывает события.

Итак, мой вопрос: правильно ли говорить, что JavaScript в браузере однопоточен? Я задаю этот вопрос, потому что очевидно, что две отдельные задачи (обработка событий и событийная ситуация здесь происходит параллельно).

Ответ 1

JavaScript является однопоточным в любом месте, в браузере или в NodeJS. Он никогда не должен был поддерживать многопоточность в любом случае (и, вероятно, если кто-то реализует JS-движок с каким-то многопоточным движением, то, безусловно, будут плохие вещи)

ИЗМЕНИТЬ, чтобы ответить на ваше редактирование:

Эта очередь событий заполняется данными (событиями мыши /kb, сетевыми событиями и т.д.) из основного цикла браузера. Тот же основной цикл, который запускает JS. Фигура, которую вы публикуете, правильная, но она (вроде) размывает реальность. AFAIK Только один поток обрабатывает все (то есть, заполняя очередь и запуская, поочередно, любой JS-код).

EDIT: один из способов доказать это: создать действительно длинный цикл и текстовую область. Попробуйте написать в тексте, пока цикл запущен. Вы не можете: это потому, что основной цикл занят запуском цикла, поэтому он не может обрабатывать события kb.

EDIT: кажется, это действительно хороший ответ: Является ли JavaScript гарантированным однопоточным?

+2 года после последнего EDIT: этот ответ становится немного старым и отстраненным от реальности. io.js(и node.js после этого, возможно, Chrom [e | ium], FF, Safari после этого) продвигается к многопроцессорной поддержке (через рабочих). Вы можете узнать больше об этом здесь.