linux high performance message passing zwischen threads in c++

sagen, ich habe einen Prozess, der spawnt 2 threads

den ersten thread hört in einer engen Schleife für Päckchen Ereignisse auf einem UDP-port.
der zweite thread zum empfangen von bytes enthalten, die in das UDP-Paket und analysieren es/etwas tun.

kann jemand empfehlen, eine schnellere Methode als die Verwendung linux message queues?
ich denke, Sie sind langsam, weil Sie das kopieren der bytes, die beim schreiben in die Warteschlange aus, und kopieren Sie wieder nach dem Lesen aus der queue

ich bin mir bewusst, zeromq-Bibliothek, aber es ist eine glatte Art und Weise dies zu tun, ohne dass overhead?
ich merke, ich könnte nur über ein tcp/ip socket zwischen den beiden Gewinde für die einfache Kommunikation in der Warteschlange, aber gibt es einen schnelleren Weg?

ich bin am überlegen vielleicht einen ring-buffer im Speicher, der gemeinsam genutzt wird zwischen dem Gewinde und einem mutex verwendet, um zu Steuern einen Zeiger auf das zuletzt aktualisierte element?

anyones Gedanken hier?

  • Ist das wirklich dein Flaschenhals? Warum nicht shared memory threads anstelle von Prozessen, wenn Sie wirklich begrenzt durch die übergabe, dass sich viele Dinge um.
  • Was hast du sonst noch versucht? Unix-sockets? Die Rohre? SysV IPC?
  • haben Sie einen Blick auf code.google.com/p/disruptor: es ist java, aber es kann Sie begeistern... 😉
  • Sie denken, Sie sind langsam, aber die Langsamkeit ist relativ zu was auch immer sonst noch Los ist im Programm. sollten Sie kennen und in der Lage sein, diese Technik verwenden, um zu sehen, was Zeit kostet. Die chance ist gut, dass Sie einen größeren speedup Gelegenheit an anderer Stelle. Jedoch, vorausgesetzt, Sie tun, und Sie es zu beheben, dann könnte es sein, dass das, was Sie Fragen, ist eigentlich das größte Problem.
Schreibe einen Kommentar