Rolf B: Web Worker CPUs werden nicht ausgelastet

Beitrag lesen

Hallo Michael_K,

für dümpelnde CPU gibt's viele Gründe.

Ich nehme mal an, dass deine Worker keine I/O machen und nur rechnen. Sobald sie mit irgendwem kommunizieren wollen, kann es zu Wartesituationen kommen.

Ein anderer Grund kann sein, dass dein Speicher voll ist und das Betriebssystem den Arbeitsspeicher deiner Workerprozesse aus- und einlagern muss. Ohne genaue Kenntnis des Umfeldes kann man das schlecht beurteilen.

Es ist übrigens nicht unbedingt hilfreich, auf einem System mit X Kernen mehr als (X-1) Worker laufen zu lassen. Einen sollte man für Betriebssystem und UI übrig lassen, die übrigen können workeln. Mehr Worker als Kerne bedeuten nur mehr Overhead für das Task Scheduling und ergeben nur Sinn, wenn außer CPU-Last auch I/O anfällt, so dass die Worker auf die Daten warten müssen.

Viele kleine Worker zu erstellen kann vermeintlich dann einen Sinn ergeben, wenn sich die Aufgabe gut in unabhängige Bausteine aufteilen lässt und diese Bausteine per Messaging kommunizieren können. Allerdings sind Browser-Worker dafür nicht das ideale Medium. Soweit ich weiß, wird für jeden Worker ein neuer Prozess gestartet (Quelle). Hast Du 50 zusätzliche Firefox-Prozesse, wenn deine Worker loslaufen? Prozesse sind für das Betriebssystem ein ziemlicher Overhead. Kleinteiliges Threading macht man besser mit Sprachen, die dafür vorgesehen sind, wie z.B. Erlang. Okay, das läuft nicht im Browser. In JavaScript ergibt das wenig Sinn.

Rolf

--
sumpsi - posui - obstruxi