2015-02-10 8 views
0

N00b вопрос. Я думаю о вложении v8/SpiderMonkey в свой код сервера. Сервер принимает тысячи запросов в секунду. Поэтому многопоточность является обязательным. Мне просто интересно, могут ли разные потоки делиться скомпилированными неизменяемыми функциями и объектами js? Поэтому мне не нужно повторять их снова и снова при запуске нового потока. Спасибо!совместно использовать неизменяемый объект/функцию в многопоточной среде (встроенный v8)

ответ

1

Изоляторы V8 являются однопоточными (только один поток может быть введен в изоляцию за один раз и получить доступ к его куче/выполнить его код), таким образом, «создание новой нити» означает создание нового изолята, который является очень тяжелым чтобы сделать это, вы определенно не сможете это сделать в ответ на запрос в любом случае.

Вы можете создать много изолятов v8 и запустить их в своих потоках параллельно, но все они будут изолированы экземпляром js-runtime. Все, что находится в их js-кучах, не может быть разделено, хотя они могут, разумеется, использовать один и тот же объект C, для которого у них есть своя собственная тонкая копия JS-обертки.

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