Wie funktioniert die Kommunikation zwischen Mitarbeitern?

9

Ich experimentiere mit Web-Mitarbeitern und frage mich, wie gut sie mit peinlich parallelen Problemen umgehen würden. Ich habe daher Connaways Spiel des Lebens implementiert. (Etwas mehr Spaß zu haben, als eine Unschärfe oder so etwas zu machen. Die Probleme wären in diesem Fall jedoch die gleichen.)

Im Moment habe ich einen Web-Mitarbeiter, der Iterationen durchführt und neue ImageData für den UI-Thread zurückschickt, um sie in meinen Canvas zu platzieren. Funktioniert gut.

Mein Experiment endet jedoch nicht dort, weil ich mehrere CPUs zur Verfügung habe und meine Anwendung parallelisieren möchte.

Um zu beginnen, teile ich einfach meine Daten in zwei Teile auf und mache zwei Arbeiter, von denen jeder eine Hälfte erledigt. Das Problem ist natürlich der Split. Arbeiter A benötigt eine Spalte von Pixeln von Arbeiter B und umgekehrt. Jetzt kann ich das eindeutig beheben, indem ich meinen UI-Thread den Arbeitern diese Spalte überlasse, aber es wäre viel besser, wenn meine Threads sie direkt an die anderen weitergeben könnten.

Wenn Sie sich weiter aufteilen, müsste jeder Mitarbeiter nur seine benachbarten Mitarbeiter im Auge behalten, und der UI-Thread wäre nur für die Aktualisierung der Benutzeroberfläche verantwortlich (wie es sein sollte).

Mein Problem ist, ich sehe nicht, wie ich diese Arbeiter-Arbeiter-Kommunikation erreichen kann. Ich habe versucht, die Nachbarn einander über eine Initialisierung postMessage zu übergeben, aber das würde meinen Arbeiter kopieren, anstatt eine Referenz zu übergeben, die mich glücklicherweise davor gewarnt hat, unmöglich zu sein.

%Vor%

Endlich sehe ich, dass da etwas namens SharedWorker ist. Ist das, was ich untersuchen sollte, oder gibt es eine Möglichkeit, das Worker zu verwenden, das mein Problem lösen würde?

    
Mithon 01.12.2011, 15:25
quelle

1 Antwort

5

Sie sollten channel messaging verwenden können:

%Vor%

Dann in Ihren Worker-Threads:

%Vor%

Es gibt nicht viel Dokumentation, aber Sie könnten diese MS-Zusammenfassung ausprobieren, um loszulegen.

    
robertc 02.12.2011, 12:43
quelle

Tags und Links