Мне нужно реализовать многопоточность, как Web Workers внутри моего приложения, в котором мы планируем использовать Spidermonkey для выполнения javascript. Я хочу что-то вроде этого API:
function BackgroundWorker() {
// do something
}
someglobalobject.spawnWorker(BackgroundWorker);
где someglobalobject.spawnWorker - это привязка C, которая порождает поток (или нет, если работник откладывается), создает новый JSContext, передает функцию BackgroundWorker в этот контекст и выполняет ее.
Мы планируем реализовать совместное использование ресурсов посредством передачи сообщений в / из работника (работник может регистрировать некоторые перехватчики событий или получать сообщения посредством вызова привязки C), а также, возможно, через привязку C к некоторой разделяемой памяти (возможно, STM). В лучшем случае мы хотим реализовать актеров в стиле Эрланга для JS. Поэтому у меня есть несколько вопросов по этому поводу:
- Есть ли примеры того, как эта вещь может быть реализована (но не слишком сложна, как Web Workers)?
- Каков след ЗАООНТекст? Можно ли их создать много, или это может вызвать некоторые узкие места в производительности?
- Есть ли возможность приостановить выполнение JavaScript внутри некоторой привязки C, которая вызывается из этого JavaScript?