C++ - Bibliotheken, die zur Umsetzung von Go goroutines oder Gehen die Kanäle?
Arbeite ich mit einem mittleren C++ - code-Basis, die derzeit komplett single-threaded. Die Zeit ist gekommen, jedoch, zu verfolgen, Gleichzeitigkeit und Parallelität für Leistungssteigerungen. Ich bin sehr interessiert in der concurrency-Modell von Google ' s Go Programmiersprache, mit sehr leichten goroutines und ein system der kommunizierenden Kanäle.
Leider, für eine Vielzahl von perfekt triftige Gründe, das Projekt braucht, um zu bleiben in C++. Also meine Frage ist: gibt es eine C++ - Bibliothek, die nahe der Go-Paradigma für Parallelität? Insbesondere ist es eine Annäherung von goroutines oder gehen die verfügbaren Kanäle für C++? Meine fallback-plan ist nur die Verwendung von boost::thread.
Die Anwendung in Frage ist ein Dauerbrenner proprietäre simulation für die financial-forecasting-Domäne. Es ist in der Regel CPU-gebunden, sondern bekommt auch blockiert IO, wenn neue Daten verfügbar werden. Viele der Berechnungen, die involviert sind, nicht abhängig von den bisherigen Ergebnissen und konnten ziemlich leicht gemacht, parallel laufen. Zu können, führen Sie die Anwendung in einem verteilten Kontext ist ein langfristiges Ziel, aber nicht eine, die muss sofort gelöst werden.
- Ähnliche Frage: stackoverflow.com/questions/2190231/...
- Wie sind Sie ähnlich?
- Sie wirklich brauchen, um genauer zu sein über Ihr Projekt. Verschiedene Arten von Anwendungen profitieren (oder nicht) unterschiedliche threading-Modelle. Werden, dass Coroutinen (die goroutines im Grunde genommen sind) oder threads, vielleicht ein event-Modell besser geeignet ist, oder einer der verschiedenen Schauspieler-Bibliotheken. Beschreiben Sie Ihre Anwendung.
- Ich habe einen Absatz der Beschreibung der Anwendung.
- C. f. auch dieser, dieser und dieser.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr Ziel ist in Erster Linie die Beschleunigung berechnen, die Dinge, die Intel TBB (Threading Building Blocks) ist (IMHO) eine bessere option als Ihre eigenen Rollen schlechter als die version aus
boost::thread
.Diese Frage und in einer Allgemeinen google-Suche nach "C++ Coroutinen" sollte Euch etwas in der Nähe. Die Frage ALSO schlägt versuchen, Boost::coroutine.
Wenn Euch das nichts ausmacht Verpackung C Sie könnte in der Lage sein, zu versuchen,libtask. Was war geschrieben von Russ Cox (einer der offiziellen Go dev team) vor arbeiten zu Gehen begann. Ich habe nur verwendet es im C obwohl, also ich weiß nicht, ob es anwendbar ist.
Gehen-Kanäle umgesetzt werden, wie das sperren von Warteschlangen, die durch die Art und Weise, so dass Sie möglicherweise in der Lage sein zu integrieren, die einen ähnlichen Mechanismus verwenden von regulären threads.
Versuchen GBL-Bibliothek, es hat alles: Coroutinen (Fasern), threads, sync und async-Handler-und es ist alle modernen C++.
Von dem, was ich bisher gesehen habe, cilk scheint ganz ähnlich zu gehen, die im Stil der Parallelität. Es sieht aus wie Intel hat es gekauft und bietet kommerziellen support mit Intel Cilk Plus.