Ich habe kürzlich mit Nachrichtenwarteschlangen (System V, aber POSIX sollte auch in Ordnung sein) in Linux gespielt und sie scheinen perfekt für meine Anwendung, aber nach dem Lesen der Kunst der Unix-Programmierung bin ich mir nicht sicher, ob sie wirklich sind gute Wahl.Sind Nachrichtenwarteschlangen in Linux veraltet?
http://www.faqs.org/docs/artu/ch07s02.html#id2922148
Die obere, message-passing Schicht von System V IPC hat außer Gebrauch weitgehend gefallen. Die untere Schicht, die aus gemeinsam genutztem Speicher und Semaphoren besteht, hat immer noch bedeutende Anwendungen unter Umständen, in denen man eine gegenseitige Ausschließungssperre und eine globale gemeinsame Datennutzung zwischen Prozessen, die auf derselben Maschine laufen, durchführen muss. Diese System V-Shared-Memory-Funktionen wurden zur POSIX Shared-Memory-API, die unter Linux unterstützt wird, den BSDs, MacOS X und Windows, aber nicht zu klassischem MacOS.
http://www.faqs.org/docs/artu/ch07s03.html#id2923376
Die System V IPC-Einrichtungen sind in Linux und anderen modernen Unix-Varianten. Da sie jedoch ein Legacy-Feature sind, werden sie nicht sehr oft ausgeübt. Die Linux-Version ist seit Mitte 2003 immer noch mit Fehlern behaftet. Niemand scheint sich genug darum zu kümmern, sie zu reparieren.
Sind die System V-Nachrichtenwarteschlangen in neueren Linux-Versionen weiterhin fehlerhaft? Ich bin mir nicht sicher, ob der Autor bedeutet, dass POSIX-Nachrichtenwarteschlangen in Ordnung sein sollten?
Es scheint, dass Sockets die bevorzugte IPC für fast alles (?) Sind, aber ich kann nicht sehen, wie es sehr einfach wäre, Nachrichtenwarteschlangen mit Sockets oder etwas anderes zu implementieren. Oder denke ich zu komplex?
Ich weiß nicht, ob es relevant ist, dass ich mit Embedded Linux arbeite?
7 Jahre später .. hoffentlich ist es nicht zu viel um noch etwas relevant zu sein: Ich wundere mich über die Standardeinstellungen von Nachrichtenwarteschlangen auf 'Ubuntu 14.04',' linux 3.13 ', nämlich' cat/proc/sys/fs/mqueue/msg_max' listet 10 (Nachrichten in einer Warteschlange) auf und '/ proc/sys/fs/mqueue/msgsize_max' ist 8192 (Bytes) - sie sind merkwürdig klein. Gibt es einen strengen Grund für diese Vorgaben oder sind sie nur alt? (Der 'man mq_overview' sagt, dass die harte Grenze von msg_max etwa 32768 ist, was ziemlich hoch ist.) Ich möchte nicht eine unendliche Stream-artige Warteschlange erstellen, sondern ist 100-1000 in 'msg_max' ok? – xealits