Как общаться между сотрудниками?

Я экспериментирую с веб-воркерами, и мне было интересно, насколько хорошо они справятся с досадно параллельными задачами. Поэтому я реализовал Game of Life Коннауэя. ( Чтобы получить немного больше удовольствия, чем делать размытие или что-то в этом роде. Однако в этом случае проблемы будут такими же.)

В настоящее время у меня есть один веб-воркер, выполняющий итерации и отправляющий новые ImageData для потока пользовательского интерфейса, чтобы разместить на моем холсте. Работает хорошо.

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

Итак, для начала я просто разделил свои данные на две части, вниз посередине и сделайте так, чтобы два воркера работали с половиной каждый. Проблема, конечно, в разделении. Рабочему A нужен один столбец пикселей от рабочего B, и наоборот. Теперь я могу исправить это, позволив моему UI-потоку давать этот столбец до рабочих, но было бы намного лучше, если бы мои потоки могли передавать их друг другу точно.

При дальнейшем разделении каждый воркер должен будет отслеживать только своих соседних воркеров, а поток пользовательского интерфейса будет отвечать только за обновление пользовательского интерфейса (как и должно быть).

Моя проблема в том, что я не понимаю, как мне достичь такого общения между сотрудниками.Я попытался передать соседей друг другу посредством инициализации postMessage, но это скорее скопировало бы моего рабочего, чем передало бы ссылку, что, к счастью, Chrome предупредило меня о невозможности.

Uncaught Error: DATA_CLONE_ERR: DOM Exception 25

Наконец, я вижу, что есть нечто, называемое SharedWorker . Это то, на что я должен обратить внимание, или есть способ использовать Worker , который решит мою проблему?

9
задан JJJ 1 December 2011 в 18:43
поделиться