The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Используемый в Firefox JavaScript-движок будет работать только в однопоточном режиме

26.01.2012 19:19

Разработчики проекта Mozilla представили изменения в организации работы JavaScript-движка SpiderMonkey, в котором был серьёзно изменен подход к организации параллельного выполнения JavaScript-кода. Движок теперь будет работать только в однопоточном режиме, а распараллеливание, например, при выполнении WebWorkers или Parallel Javascript, будет обеспечено за счёт запуска внутри одного процесса отдельных экземпляров SpiderMonkey (JSRuntime), каждый из которых использует непересекающиеся области памяти.

Таким образом, SpiderMonkey больше не будет распараллеливать работу в рамках одного экземпляра JavaScript-движка (каждый из которых физически является экземпляром процесса JSRuntime), но будет на каждый новый обрабатываемый источник запускать дополнительные экземпляры. Причем каждый отдельный экземпляр будет использоваться в контексте своего собственного сборщика мусора, т.е. фрагментация и потребление памяти при такой стратегии должны уменьшиться, а скорость работы движка для некоторых типов приложений - возрастёт.

Вместо использования общей области памяти для всех объектов JavaScript, новая схема работы подразумевает задействования нескольких отдельных "куч" (heap). Концепция, в рамках которой реализованы множественные кучи, - получила название "отсеков" (compartment), где каждый отсек – это отдельная куча из JavaScript-объектов одинакового происхождения. При этом, SpiderMonkey может создавать множество своих экземпляров в одном и том же процессе, каждый из которых может быть доступен через различные потоки.

Изначально поддержка "отсеков" появилась в SpiderMonkey 1.8.5, вошедшего в состав Firefox 4.0, и использовалась для изоляции JavaScript-объектов от разных источников. Использование отсеков приводит как минимум к двум важным следствиям:

  • Все JavaScript-объекты, создаваемые каждым отдельным сайтом, располагаются в своих отдельных отсеках, что улучшает работу кэша, так как они располагаются всегда физически в одном участке памяти. Если раньше их поиск и выборка в памяти создавали избыточную нагрузку на процессор, то теперь они компактно и последовательно упакованы на небольшом участке памяти, который никак не пересекается с другими JavaScript-объектами;
  • Последнее напрямую связано со вторым важным следствием такой стратегии: теперь JavaScript-объекты (включая JavaScript-функции, которые являются частью этих объектов) могут обращаться исключительно в пределах своих отсеков, что чрезвычайно важно в свете множественных потенциальных проблем с безопасностью у прошлой модели. Для соблюдения этого реализован очень низкоуровневый механизм, который гарантирует, что на уровне работы разнородных объектов невозможно нарушить эту изоляцию. Это значит, что объекты из пространства mail.google.com никак не могут повлиять на работу объектов в отсеке www.bank.com. В то же самое время, в текущей реализации существует специальный тип объектов, который может работать между отсеками поверх границ их взаимной изоляции. Эти объекты контролируются и создаются самим движком для его системных нужд и называются "cross-compartment wrappers".

Напомним, что SpiderMonkey – это встраиваемый JavaScript-движок с открытым исходным кодом от компании Mozilla. Он написан на C/C++ и используется в нескольких продуктах от Mozilla, включая такие известные, как Firefox. Он распространяется под тройной лицензией - MPL/GPL/LGPL. SpiderMonkey 1.8.5 – это последний стабильный релиз движка, выполненный в виде отдельного встраиваемого модуля. С незначительными модификациями на нем базируется JavaScript-движок браузера Firefox начиная с версии 4.0.

  1. Главная ссылка к новости (http://blog.mozilla.com/luke/2...)
  2. OpenNews: Разработчики Firefox обозначили цели перехода на новую многопроцессную архитектуру
  3. OpenNews: Разработчики Mozilla работают над реализацией многопоточного рендеринга web-страниц
  4. OpenNews: Intel представил River Trail, расширение к JavaScript для параллельного программирования
  5. OpenNews: Firefox отказывается в обозримом будущем от перехода на многопроцессную модель
Автор новости: Igor Savchuk
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/32905-spidermonkey
Ключевые слова: spidermonkey, javascript, firefox, mozilla
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (41) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, ILYA INDIGO (ok), 21:03, 26/01/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Давайте уже поскорее 11-ую версию Firefox-а допиливайте, которая не будет течь!
     
     
  • 2.3, paulus (ok), 21:28, 26/01/2012 [^] [^^] [^^^] [ответить]  
  • –7 +/
    Да, ждемсъ... 10b еще течет,  126mb (в 18:28) при запуске с расширениями в простое без вкладок  184mb (19:14). Нужно еще последить за чистой лисой. А вот 12а-ночная еще падает, от каждого чиха, по сравнению с ней chromium_snapshots как debian stable ;)
     
     
  • 3.4, Lain_13 (?), 21:39, 26/01/2012 [^] [^^] [^^^] [ответить]  
  • +4 +/
    А где она у вас падает? А то у меня почему-то не падает.
     
     
  • 4.6, filosofem (ok), 23:48, 26/01/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Где-где, в венде. =)
     
     
  • 5.33, paulus (ok), 18:43, 28/01/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Где-где, в венде. =)

    у вас может и в винде, у меня только линукс

     
  • 4.7, ILYA INDIGO (ok), 01:54, 27/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Час работы и память за пол гига, часа 3 и уже за гиг, вчера заснул ночью после работы при просмотре онлайн фильма, на утро KDE висит, начинаю разбираться, висит начинаю разбираться, подвесила прога отсылающая баг-рапорт.:))) Идиотизм просто!
    И кстати при падении и отправки рапорта, и такое у меня часто, причём внезапна, при нажатии на кнопку send and restart у меня никогда сам firfox не перезагружается после этого.
     
     
  • 5.23, Lain_13 (?), 17:06, 27/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    http://www.youtube.com/watch?v=aHF5uoonR-c
    У меня что в винде, что в Убунту 12я отлично себя чувствует.
     
     
  • 6.27, ILYA INDIGO (ok), 17:49, 27/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    12-ая не 9-ая!
    У меня 11-ая аврора то же работала стабильно, не считая того что она только 32-битная, в которой тормозит 32-битный флэш, не работает mozilla-kde-integration  и превязка к протоколам...
    Собирать из 1-ого гига исходников у меня желания нет.
    В репах openSUSE только стабильная и бэта, причём в бэте не работает kde-integration что для меня не удобно.
     
     
  • 7.30, Lain_13 (?), 01:05, 28/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > 12-ая не 9-ая!

    Ну тема начиналась кагбэ с жалобы на 12ю.

    > не считая того что она только 32-битная

    Враньё. На ftp мозиллы доступна как 32-битная, так и 64-битная сборки. Качай какую хочешь.
    ftp://ftp.mozilla.org/pub/firefox/nightly/latest-trunk/
    Вот, например:
    ftp://ftp.mozilla.org/pub/firefox/nightly/latest-trunk/firefox-12.0a1.en-US.
    64-битный флэш в ней работает, не могу сказать тормозит он особо или нет (у меня он всегда тормозил).

    > mozilla-kde-integration

    не работает потому, что это, я так понимаю, это расширение. На сколько я помнбю в 12й выпилили проверку версии так что может и заработать. А можешь сам выключить проверку версии принудительно если всё равно отметит как несовместимое.

     
     
  • 8.34, paulus (ok), 18:48, 28/01/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    там и брал работает, но сильно падуч сам браузер, причин не знаю даже закрытие... текст свёрнут, показать
     
  • 8.40, ILYA INDIGO (ok), 19:48, 29/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Что то НЕ нащёл я тут 11-ой авроры А nigtly она как миниум, без локализации, чт... текст свёрнут, показать
     
  • 8.41, ILYA INDIGO (ok), 19:52, 29/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Тема начиналась с просьбы не отвлекаться на второстепенные вещи и поскорее перев... текст свёрнут, показать
     
  • 8.42, ILYA INDIGO (ok), 19:57, 29/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Да это расширение, и оно в менеджере расширений отмечено как совместимое и рабоч... текст свёрнут, показать
     
  • 5.24, Xasd (ok), 17:13, 27/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > вчера заснул ночью после работы при просмотре онлайн фильма, на утро KDE висит

    а plugin-conteiner солько занимал на утро? или он был заранее отключён через about:config (в этом случае С.С.З.Б :)) ?

     
     
  • 6.26, ILYA INDIGO (ok), 17:44, 27/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Не смотрел, хотя если сам firefox был уже в ауте, то логично предположить что plugin-conteiner был там же.
    А память жрёт, если верить процессам, именно firefox.
     
     
  • 7.32, Аноним (-), 02:03, 28/01/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вот скажите, что я делаю не так что у меня он за 2 недели как жрал гиг на типовом наборе вкладок, так и жрет его же, с точностью до плюс-минус сотни мегов. У меня свопа вообще нет, если б там текло - я должен был бы давно откинуть лапки по OOM. Может, у вас профайл зверски загажен и вам стоит попробовать создать чистый?
     
     
  • 8.35, paulus (ok), 18:52, 28/01/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    с чистым тоже самое и about memory занят сайтами которые как полдня были закрыты... текст свёрнут, показать
     
  • 8.43, ILYA INDIGO (ok), 20:20, 29/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вы батенька и Петросян По вашему гиг для браузера это нормально 1 Держат... текст свёрнут, показать
     
     
  • 9.44, aborland (?), 11:51, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Батенька, не пользуйте нетбуки с маленькой памятью Я давно пришел к выводу что ... текст свёрнут, показать
     
  • 5.31, Аноним (-), 02:01, 28/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > подвесила прога отсылающая баг-рапорт.:))) Идиотизм просто!

    А где был OOM killer? Пиво пил?

     
     
  • 6.39, ILYA INDIGO (ok), 19:42, 29/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Вот честно говоря не знаю, может быть его у меня в openSUSE по дефолту вообще нету...
     

  • 1.2, sphericalhorse (ok), 21:18, 26/01/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –11 +/
    Правильно! Вместо того, чтобы хардкорно лечить браузер, давайте его кастрируем!
     
     
  • 2.22, Xasd (ok), 16:57, 27/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    нет блин.. давайте его не "кастрируем" (что коррекнее былобы назвать "вырежем опухоль") -- а будем нагромождать наисложнейние запутанные технологии синхронизации между объектами Javascript среды??? :-D :-D [технологии, которые одновременно: какбы и не тормазят, и какбы безопасные :-D :-D :-D]

    уже 100500 уязвимостей было найдено вертящихся около тематики того что происходит сложная перестройка DOM-дерева и в определённый момент паралельно-работабщий скрипт (<script async="true">...</script>) делает обращение к объекту этого перестраивамого DOM-дерева

    очевидноже -- что куда прощще предоставить каждой отдельной Ните (Thread) Javascript-кода -- отдельный экземпляр js-движка.. и обмениться статусом между движками -- через сообщения, а не через хренову тучу механизмов синхронизации.

     

  • 1.5, Аноним (-), 22:28, 26/01/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А что, неплохо. Получается дедупликация объектов в памяти.
     
  • 1.9, evgeny_t (ok), 04:12, 27/01/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    это пц
    они держали разные вебсайты в одной области памяти ?
    кто же у них головой думает ?
     
     
  • 2.10, Дмитрий (??), 09:16, 27/01/2012 [^] [^^] [^^^] [ответить]  
  • +6 +/
    В браузерах издавна так было. Это со времен хрома пошли эти виртуализации, "каждой сущности - процесс" и т.д. Так что ваше удивление удивительно.
     
  • 2.12, АнониМ (?), 11:04, 27/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Так все всегда делали и только с очень недавнего времени перестали. Это позволяло очень сильно сэкономить память при табиках.
     

  • 1.11, Аноним (-), 09:42, 27/01/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    я правильно понимаю, что "потоки" станут значительно тяжелее? раз надо весь рантайм каждый раз подгружать
     
     
  • 2.13, АнониМ (?), 11:05, 27/01/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Да и серьёзно. см. Гугл браузер.
     
     
  • 3.15, Hugo Reyes (ok), 12:02, 27/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    тока у гугл браузера весь рантайм (включая то, что у мозиллы разбросано по разным архивам и собирается через механизм chrome) в зиготе, которая при старте процесса форкается и все быстренько подбирается не с диска, а напрямую из дискового кэша.
     
     
  • 4.17, Crazy Alex (??), 15:08, 27/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    А чего ради оно должно заново с диска читаться? Ну будет создаваться новый объект JSRuntime - и что? Я еще понимаю, что памяти оно жрать может больше, но диск и кэш здесь при чём? Да даже если и читается что-то - никто не отменял фабрики, которые создают заранее отконфигурированны экземпляры класса...
     
  • 2.14, botman (ok), 11:08, 27/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    потоки теперь будут рантаймами, а рантайм станет процессом если читать оригинал, и ничего не поменяется после соответствующих изменений кода.
     
     
  • 3.18, Crazy Alex (??), 15:09, 27/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Процесс с потоком не путайте, пожалуйста.
     
  • 2.19, Crazy Alex (??), 15:14, 27/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    В оригинальной статье говорят, что такой вариант наоборот экономит память
     
     
  • 3.37, Аноним (-), 19:19, 29/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > В оригинальной статье говорят, что такой вариант наоборот экономит память

    Элементарная логика подсказывает, что в статье выдают желаемое за действительное.
    Основная идея состоит в том, чтобы по возможности скопировать изолированную модель хрома. А какой у нее расход памяти - можно не рассказывать.

     

  • 1.20, Anon2k (ok), 15:15, 27/01/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >SpiderMonkey больше не будет распараллеливать работу

    Зато вон как звонко кукарекали про Rust, про МЕГАГИТЛЕРМНОГОПОТОЧНОСТЬ. Докукарекались.

     
     
  • 2.25, h31 (ok), 17:31, 27/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Так то было про DOM.
     

  • 1.21, Xasd (ok), 16:40, 27/01/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    поменяйте заголовок новости.. сенсационная желтезна какаято!

    не "Используемый в Firefox JavaScript-движок будет работать только в однопоточном режиме"

    а [например] "Рефакторинг многопоточной модели реализации Javascript в Firefox"

    ....ато так написали заголовок как будтобы Firefox деградирует :-D

    # p.s.: хотя с другой стороны -- получился "заголовок-детектор". можно определять кто из комментаторов читает полностью новость, а кто только заголовок :-D

     
     
  • 2.38, Аноним (-), 19:22, 29/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > поменяйте заголовок новости.. сенсационная желтезна какаято!
    > не "Используемый в Firefox JavaScript-движок будет работать только в однопоточном режиме"
    > ....ато так написали заголовок как будтобы Firefox деградирует :-D

    Да, надо было написать "Firefox опять пытается повторить подвиги Chrome - ждите очередное увеличение жрача памяти".

     

  • 1.28, Sauron (??), 22:19, 27/01/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    И на винде с её убогими тормозными процессами станет весело.
     
     
  • 2.29, Crazy Alex (ok), 23:09, 27/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    А новость лучше таки читать. А еще лучше - еще и оригинал. Речь всего лишь о том, что различные JS-потоки будут взаимодействовать по схеме share-nothing, в рамках одного процесса.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру