Ist es sinnvoll, mehrer web worker gleichzeitig zu erstellen und die Arbeit zur Berechnung darauf zu verteilen
In der Regel ja. Natürlich unter der Voraussetzung, dass sich die Aufgabe sinnvoll zerteilen und parallelisieren lässt. Davon abgesehen, dass nicht alle Browser Web Workers unterstützen, unterstützen auch nicht alle das Senden von komplexen Daten. Und wenn, dann werden sie serialisiert und deserialisiert, damit geklont. Das ist der angesprochene Overhead. Erst Transferable Objects werden das Problem lösen. In älteren Browsern müssen ggf. manuell JSON-Strings verschickt werden. Hier ist eine Feature-Abfrage nötig, um diese Browser ggf. auszuschließen.
oder sollte ich nur einen web worker mit der Berechnung laufen lassen?
Das kann man so pauschal nicht beantworten, das solltest du einfach ausprobieren. Probiere mit einem Pool von 5-10 Workern und finde den Punkt, wo keine Verbesserungen mehr erzielt werden können.
Werden mit jedem web worker auch jeweils eigene threads gestartet oder ist das auch abhängig von der jeweiligen Hardware (Multicore CPU etc.) bzw. Browser-Implementierung?
Web Workers können mehrere Prozessorkerne nutzen, ja. Die tatsächliche Umsetzung hängt vom Browser, Prozessor und vom Betriebssystem ab. Wenn in einem Browser 10 Worker eine optimale Performance bringen, kann es sein, dass ein anderer mit 5 ausgelastet ist (bei gleicher Hardware).
Ich würde gerne mehr darüber erfahren, bevor ich etwas implementiere, was nur auf der Hälfte der Hardware, oder der Browser mit web worker Unterstützung funktioniert.
Da kannst du eigentlich nichts falsch machen, funktionieren wird es immer – außer du schießt den Browser ab oder die Performance geht in den Keller. Da musst du durch Ausprobieren mit deinem konkreten Algorithmus Erfahrungen sammeln. Wie immer in der Webentwicklung musst du ohnehin in verschiedenen Browsern und auf verschiedenen Systemen testen, um einen sinnvollen Weg zu finden.
Mathias