Frage

Gibt es eine Möglichkeit, die Anzahl der verfügbaren CPU-Kerne in JavaScript zu ermitteln, sodass Sie die Anzahl der Web-Worker abhängig davon anpassen können?

War es hilfreich?

Lösung

Ja.Um MDN zu zitieren:

Der navigator.hardwareConcurrency Die schreibgeschützte Eigenschaft gibt die Anzahl der logischen Prozessoren zurück, die zum Ausführen von Threads auf dem Computer des Benutzers verfügbar sind.

Moderne Computer verfügen über mehrere physische Prozessorkerne in ihrer CPU (zwei oder vier Kerne sind typisch), aber jeder physische Kern ist normalerweise auch in der Lage, mithilfe fortschrittlicher Planungstechniken mehr als einen Thread gleichzeitig auszuführen.Eine Vierkern-CPU bietet also möglicherweise acht Kerne logische Prozessorkerne, Zum Beispiel.Die Anzahl der logischen Prozessorkerne kann verwendet werden, um die Anzahl der Threads zu messen, die effektiv gleichzeitig ausgeführt werden können, ohne dass ein Kontextwechsel erforderlich ist.

Der Browser meldet jedoch möglicherweise eine geringere Anzahl logischer Kerne, um die Anzahl der Worker, die gleichzeitig ausgeführt werden können, genauer darzustellen. Behandeln Sie dies also nicht als absolutes Maß für die Anzahl der Kerne im System des Benutzers .

Es wird unterstützt von Jeder Browser außer Internet Explorer. Dafür können Sie die Polyfüllung verwenden core-estimator (Demo, Blogeintrag).

Andere Tipps

nein, es gibt nicht, es sei denn, Sie verwenden etwas ActiveX.

Hier ist ein ziemlich schneller Parallelitätsschätzer, den ich zusammengehackt habe ... es hat noch nicht viel getestet:

http://jsfiddle.net/ma4yt/2/

Hier ist der Code, der die Arbeiter ausführen (da ich einen JSFIDDLE-Link habe, ist eine Probe erforderlich):

generasacodicetagpre.

Der Schätzer hat eine große Anzahl von Arbeitnehmern für einen kurzen Zeitraum (4ms) und meldet die Zeiten, in denen sie (leider leistung ()) in Web-Arbeitern für einen genaueren Timing nicht verfügbar ist). Der Hauptfaden prüft dann die maximale Anzahl von Arbeitnehmern, die gleichzeitig ausgeführt wurden. Dieser Test wird mehrmals wiederholt, um eine anständige Probe zu erhalten, um eine Schätzung mit.

Die Hauptidee ist also, dass die Arbeiter, wenn ein kleiner Teil der Arbeit, nur dann geplant sein sollte, gleichzeitig geplant, wenn es genügend Kerne gibt, um dieses Verhalten zu unterstützen. Es ist offensichtlich nur eine Schätzung, aber bisher ist es angemessen für einige Maschinen, die ich getestet habe, vernünftigerweise genau, was für meinen Anwendungsfall gut genug ist. Die Anzahl der Proben kann erhöht werden, um eine genauere Annäherung zu erhalten. Ich benutze nur 10, weil es schnell ist, und ich möchte keine Zeitabschätzung verschwenden, um nur die Arbeit zu bekommen.

Wenn Sie auf Ihren Arbeitnehmern Daten knallen werden, ist der generasAdicetagcode möglicherweise nicht gut genug, da er die Anzahl der logischen Kerne in modernen Browsern zurückgibt. Sie können versuchen, die Anzahl der physischen Kerne mit webcpu :

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top