Разработчики проекта Mozilla представили [3] изменения в организации работы JavaScript-движка SpiderMonkey [4], в котором был серьёзно изменен подход к организации параллельного выполнения JavaScript-кода. Движок теперь будет работать только в однопоточном режиме, а распараллеливание, например, при выполнении WebWorkers [5] или Parallel Javascript [6], будет обеспечено за счёт запуска внутри одного процесса отдельных экземпляров SpiderMonkey (JSRuntime), каждый из которых использует непересекающиеся области памяти.
Таким образом, SpiderMonkey больше не будет распараллеливать работу в рамках одного экземпляра JavaScript-движка (каждый из которых физически является экземпляром процесса JSRuntime), но будет на каждый новый обрабатываемый источник запускать дополнительные экземпляры. Причем каждый отдельный экземпляр будет использоваться [7] в контексте своего собственного сборщика мусора, т.е. фрагментация и потребление памяти при такой стратегии должны уменьшиться, а скорость работы движка для некоторых типов приложений - возрастёт.
Вместо использования общей области памяти для всех объектов JavaScript, новая схема работы подразумевает задействования нескольких отдельных "куч" (heap). Концепция, в рамках которой реализованы множественные кучи, - получила название "отсеков" (compartment [7]), где каждый отсек – это отдельная куча из JavaScript-объектов одинакового происхождения. При этом, SpiderMonkey может создавать множество своих экземпляров в одном и том же процессе, каждый из которых может быть доступен через различные потоки.
Изначально поддержка "отсеков" появилась в SpiderMonkey 1.8.5, вошедшего в состав Firefox 4.0, и использовалась для изоляции JavaScript-объектов от разных источников. Использование отсеков приводит как минимум к двум важным следствиям:
Напомним, что SpiderMonkey [8] – это встраиваемый JavaScript-движок с открытым исходным кодом от компании Mozilla. Он написан на C/C++ и используется в нескольких продуктах от Mozilla, включая такие известные, как Firefox. Он распространяется под тройной лицензией - MPL/GPL/LGPL. SpiderMonkey 1.8.5 – это последний стабильный релиз движка, выполненный в виде отдельного встраиваемого модуля. С незначительными модификациями на нем базируются JavaScript-движок браузера Firefox начиная с версии 4.0.
Ссылки:
[1] http://htfl.ru/cat-news-mozilla
[2] http://htfl.ru/cat-news-novosti
[3] /out.php?link=http://blog.mozilla.com/luke/2012/01/24/jsruntime-is-now-officially-single-threaded/
[4] /out.php?link=https://developer.mozilla.org/en/SpiderMonkey
[5] /out.php?link=http://dev.w3.org/html5/workers/
[6] /out.php?link=http://smallcultfollowing.com/babysteps/blog/2012/01/09/parallel-javascript/
[7] /out.php?link=https://developer.mozilla.org/en/SpiderMonkey/SpiderMonkey_compartments
[8] /out.php?link=http://en.wikipedia.org/wiki/SpiderMonkey