Я использую веб-рабочих, чтобы сделать некоторый ЦП интенсивная работа, но иметь требование, чтобы рабочий ответил на сообщения из родительского сценария, в то время как рабочий все еще обрабатывает.
Рабочий однако не ответит на сообщения, в то время как это заблокировано в цикле обработки, и я не нашел, что способ сказать опрашивает очередь сообщений. Таким образом кажется, что единственное решение состоит в том, чтобы повредить обработку в интервале, чтобы позволить любым сообщениям в очереди обслуживаться.
Очевидные опции состоят в том, чтобы использовать таймер (скажите с setInterval), однако я считал, что минимальная задержка между взрывами является довольно длительной (http://ajaxian.com/archives/settimeout-delay), который неудачен, поскольку это замедлит обработку много.
Каковы другие мысли народов об этом? Я собираюсь попробовать, сделали, чтобы рабочий диспетчеризировал onmessage
к себе в конце каждого onmessage
, таким образом эффективно реализация одного шага цикла обработки на событие получила от себя, но просто требуемый, чтобы видеть, были ли у кого-либо какие-либо идеи об этом.
Спасибо,
Рабочий может порождать подчиненных рабочих. Вы можете сделать так, чтобы ваш основной воркер действовал как ваша очередь сообщений, и когда он получает запрос на длительную операцию, порождает подчиненного воркера для обработки этих данных. Затем подчиненный рабочий может отправить результаты обратно основному рабочему, чтобы удалить событие из очереди и вернуть результаты в основной поток. Таким образом, ваш основной исполнитель всегда сможет прослушивать новые сообщения, а вы получите полный контроль над очередью.
- Ник