Frage

Ich habe ein Projekt bekam, die aus zwei Prozessen besteht und ich brauche einige Daten zwischen ihnen auf eine schnelle und effiziente Art und Weise zu übergeben.

Ich bin mir bewusst, dass ich Sockets verwenden könnte dies mit TCP zu tun, obwohl beiden Prozesse immer auf demselben Computer vorhanden sein werden, aber dies scheint nicht eine sehr effiziente Lösung.

Ich sehe eine Menge Informationen über „Pipes“ auf Linux verwenden. Ich dies in erster Linie jedoch will für Windows und Linux (vorzugsweise über eine Cross-Plattform-Bibliothek), idealerweise in einer Art Safe, nicht blockierende Art und Weise.

Eine weitere wichtige Sache, die ich mehrere Instanzen der gesamten Anwendung (das heißt beide Prozesse), die jeweils mit ihren eigenen unabhängigen Kopie der Kommunikationsobjekte.

unterstützen müssen

Auch gibt es einen Cross-Plattform-Weg, ein neues Verfahren zum Laichen?

War es hilfreich?

Lösung

Für IPC, Windows-Named Pipes unterstützt wie Linux ist , mit der Ausnahme, dass die Rohrnamen ein anderes Format folgen, aufgrund im Pfad die Differenz Formate zwischen den beiden Betriebssystemen. Dies ist etwas, was man mit einfachen Präprozessor definiert überwinden konnte. Beide Betriebssysteme unterstützen auch nicht-blockierende IO IO an Rohren und Multiplexen mit select ().

Andere Tipps

Hier finden Sie aktuelle Boost.Interprocess

  

Boost.Interprocess vereinfacht die Verwendung von gemeinsamen Interprozess-Kommunikation und Synchronisationsmechanismen und bietet eine breite Palette von ihnen:

     
      
  • Shared Memory.
  •   
  • Memory-Mapped-Dateien.
  •   
  • Semaphore, Mutexe, Bedingungsvariablen und aktualisierbar Mutex Typen sie im Shared Memory und Memory-Mapped-Dateien zu platzieren.
  •   
  • Named Versionen dieser Synchronisationsobjekte, ähnlich wie UNIX / Windows sem_open / CreateSemaphore API.
  •   
  • Das Sperren von Dateien.
  •   
  • Relative Zeiger.
  •   
  • Nachrichtenwarteschlangen.
  •   
     

Boost.Interprocess bietet auch höherer Ebene Inter Mechanismen dynamisch zuzuteilen Teile eines gemeinsamen Speichers oder einer Speicherabbilddatei (in der Regel zuzuweisen Teile eines festen Größe Speichersegment). Mit Hilfe dieser Mechanismen, Boost.Interprocess bietet nützliche Werkzeuge C ++ Objekte zu konstruieren, einschließlich STL-ähnlichen Behälter, in Shared Memory und Memory-Mapped-Dateien:

     
      
  • Dynamische Erstellung von anonymen und benannte Objekte in einem gemeinsam genutzten Speicher oder Speicherabbilddatei.
  •   
  • STL-ähnliche Behälter kompatibel mit Shared Memory / Memory-Mapped-Dateien.
  •   
  • STL-like Verteilern bereit für Shared Memory / Memory-Mapped-Dateien mehr Speicherzuordnungsmuster (wie Pooling) zu implementieren.
  •   
     

Boost.Interprocess hat in den folgenden Compilern / Plattformen getestet:

     
      
  • Visuell 7.1 Windows XP
  •   
  • Visuell 8.0 Windows XP
  •   
  • GCC 4.1.1 MinGW
  •   
  • GCC 3.4.4 Cygwin
  •   
  • Intel 9.1 Windows XP
  •   
  • GCC 4.1.2 Linux
  •   
  • GCC 3.4.3 Solaris 11
  •   
  • GCC 4.0 MacOs 10.4.1
  •   

Einfache alte TCP sollte recht effizient arbeiten; wie ich es, moderne Betriebssysteme erkennt verstehen, wenn beide Enden einer TCP-Verbindung auf der gleichen Maschine befinden, und wird intern Weg, dass die Daten durch einen schnellen, leichten (rohrartigen) Mechanismus anstatt durch den normalen TCP-Stack.

Also, wenn Sie bereits einen Code, der über TCP arbeitet, sage ich mit dabei bleiben und zu vermeiden, nicht viel Auszahlung viel zusätzliche Entwicklungszeit zu verbringen.

Es kann zu viel des Guten, aber man konnte die Apache Portable Runtime verwenden; hier sind die Gewinde und Prozessfunktionen.

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