multi-core-Programmierung mit JavaScript?
Also ich habe das ernst rekursive Funktion, die ich gerne verwenden möchte mit meinem code. Das Problem ist es nicht wirklich die Vorteile der dual-core-Maschinen, weil js ist single threaded. Ich habe versucht mit Webworker aber nicht wirklich viel Ahnung von multicore-Programmierung. Würde mir jemand zeigen, um einige Materialien, die erklären könnten, wie es gemacht wird. Ich googeln um die zu finden, Beispiel-link aber nicht wirklich viel helfen, ohne Dokumentation! =/
Ich würde mich freuen, wenn jemand mir zeigen könnte, wie dieses getan werden könnte, ohne Webworker obwohl! Das wäre einfach nur genial! =)
Stieß ich auf diese link auf der whatwg. Das ist wirklich komisch, weil es erklärt, wie die multicore-Programmierung in Webworker etc, aber auf die Ausführung auf meinem chrome browser, es wirft Fehler. Gleiche geht auch mit anderen Browsern.
Fehler: 9Uncaught ReferenceError: Arbeiter ist nicht definiert worker.js
- Schöne Frage, da ich noch nie davon gehört WebWorker vor. U finden Sie eine gute Doku hier developer.mozilla.org/En/Using_web_workers und eine coole Abstraktion hier code.google.com/p/jsworker
- Danke, ich habe mit Webworker vor und Sie machen eine wunderbare Arbeit, die Befreiung für die UI. Verwenden Sie es für meine web-app Spiele-Berechnungen. Aber ich würde wirklich gerne eine anständige dokumentierten code zu verstehen, wie Sie mithilfe der multicore-Programmierung it-Aspekte. Wenn javascript selbst es tun könnte, das wäre einfach nur genial aber das ist eine lange gedreht =/
- Sie können wahrscheinlich einen Weg finden, dies zu tun. Aber Ihre grundlegende Vorschlag hier ist, "wählen Sie eine Programmiersprache, deren Implementierung in der Regel langsam ausführen, und dann gehen parallel". Menschen mit schweren rechnerische Aufgaben zuerst wählen Sie eine Sprache, deren Implementierungen sind als schnelle (z.B. kompiliert), und fahren Sie dann parallel. Wenn/Als Javascript bekommt JIT-kompiliert, geht parallel mit JavaScript vielleicht mehr Sinn machen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE (2018-06-21): Für Besucher, die hier auf der Suche nach multi-core-Programmierung in JavaScript, nicht unbedingt browser JavaScript (für die, die Antwort noch gilt-ist): Node.js unterstützt jetzt multi-threading, hinter einem feature flag (
--experimental-workers
): release-info, relevante Frage.Schreiben dieser aus der Spitze von meinem Kopf, keine Garantien für die source-code. Bitte gehen Sie einfach auf mich.
Soweit ich weiß, kann man nicht wirklich Programm in threads mit JavaScript. Webworker sind eine form der multi-Programmierung, aber in JavaScript ist von Natur aus single-threaded (basierend auf einer Ereignis-Schleife).
Einen webworker ist separaten thread der Ausführung, in dem Sinne, dass es nicht teilen, alles mit dem script, dass es begonnen; es gibt keinen Verweis auf das Skript Globale Objekt (in der Regel sogenannte "Fenster" im browser), und keine Referenz auf deine Haupt-Skript die Variablen andere als die Daten, die Sie senden, um den thread.
Denke, wie die web worker als kleinen "server", der bekommt eine Frage gestellt und beantwortet. Sie können nur senden Saiten, die auf diesem server, und es kann nur parse den string und zurück senden, was es berechnet wurde.
Können Sie senden Sie dann eine Nachricht (einen String) zu diesem thread mit seinen postMessage()-Methode:
Einer Probe worker-Skript (ein "echo" - server) können sein:
was auch immer Sie einen Beitrag in diesem thread decodiert wird, re-codiert und wieder zurück geschickt. natürlich können Sie tun, was die Verarbeitung würden Sie wollen, zu tun zwischen. Der Arbeitnehmer aktiv bleiben; Sie können call
terminate()
auf es (in Ihrem Haupt-Skript; das wärew.terminate()
) zu beenden oder aufrufenself.close()
in Ihre Arbeiter.Zusammenfassen: was Sie tun können, ist Sie zip up Ihre Funktion Parameter in einen JSON-string, der gesendet wird, mit
postMessage
, decodiert und verarbeitet werden "auf der anderen Seite" (der Arbeiter). Die Berechnung Ergebnis gesendet wird, zurück zum "main" - Skript.Zu erklären, warum das nicht einfacher: Mehr Interaktion ist nicht wirklich möglich, und diese Beschränkung ist gewollt. Da gemeinsame Ressourcen (ein Objekt sichtbar, um sowohl die Arbeiter und das main-script) unterliegen würden zwei threads, die sich mit Ihnen zur gleichen Zeit, würden Sie brauchen, um zu verwalten zugreifen (D. H., sperren), um diese Ressource, um zu verhindern, dass race-conditions.
Den message-passing, shared-nothing-Ansatz ist nicht, dass gut bekannt, vor allem, weil die meisten anderen Programmiersprachen (C und Java zum Beispiel) benutzen Sie threads, die auf den gleichen Adressraum (während andere, wie Erlang, zum Beispiel nicht). Bedenken Sie:
Probieren Sie es einfach aus, es ist in der Lage, interessante Dinge, die wahrscheinlich alles, was Sie wollen. Bedenken Sie, dass es ist noch Umsetzung definiert, ob es nutzt multicore-soweit ich weiß.
NB. Ich habe gerade informiert, dass mindestens einige Implementierungen Griff JSON-Kodierung von Nachrichten für Sie.
So, eine Antwort zu geben auf deine Frage, (es ist alles über; die tl;dr version): Nein, Sie können nicht dies tun, ohne web-worker. Aber es gibt nichts wirklich falsch über web-worker abgesehen von browser-Unterstützung, wie es der Fall mit HTML5 im Allgemeinen.
Soweit ich mich erinnere ist dies nur möglich mit den neuen HTML5-standard. Das keyword "Web-Worker"
Siehe auch:
HTML5: JavaScript Web worker
JavaScript-Threading Mit HTML5 Web Workers
Web-worker sind die Antwort auf die client-Seite. Für NodeJS gibt es viele Ansätze. Beliebtesten - laichen mehrere Prozesse mit
pm2
oder einem ähnlichen Werkzeug. Führen Sie einzelne Prozess-und spawn - /fork child-Prozesse. Sie können google um diese und finden eine Menge Proben und Taktik.Web-Arbeiter sind bereits gut von allen Browsern unterstützt. https://caniuse.com/#feat=webworkers
API & Proben: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers