Реализация потоков JavaScript в Spidermonkey - PullRequest
1 голос
/ 23 декабря 2011

Мне нужно реализовать многопоточность, как Web Workers внутри моего приложения, в котором мы планируем использовать Spidermonkey для выполнения javascript. Я хочу что-то вроде этого API:

function BackgroundWorker() {
    // do something
}

someglobalobject.spawnWorker(BackgroundWorker);

где someglobalobject.spawnWorker - это привязка C, которая порождает поток (или нет, если работник откладывается), создает новый JSContext, передает функцию BackgroundWorker в этот контекст и выполняет ее. Мы планируем реализовать совместное использование ресурсов посредством передачи сообщений в / из работника (работник может регистрировать некоторые перехватчики событий или получать сообщения посредством вызова привязки C), а также, возможно, через привязку C к некоторой разделяемой памяти (возможно, STM). В лучшем случае мы хотим реализовать актеров в стиле Эрланга для JS. Поэтому у меня есть несколько вопросов по этому поводу:

  1. Есть ли примеры того, как эта вещь может быть реализована (но не слишком сложна, как Web Workers)?
  2. Каков след ЗАООНТекст? Можно ли их создать много, или это может вызвать некоторые узкие места в производительности?
  3. Есть ли возможность приостановить выполнение JavaScript внутри некоторой привязки C, которая вызывается из этого JavaScript?
...