Czy ktoś ma pojęcia o względnej wydajności GAsyncQueue GLib w porównaniu z POSIX message_queue dla komunikacji między wątkami? Będę miał wiele małych komunikatów (zarówno w jednym, jak i w trybie odpowiedzi na żądanie), które będą implementowane w języku C na Linuksie (na razie można je później przenieść do systemu Windows). Próbuję zdecydować, którego użyć.GAsyncQueue GLib vs POSIX message_queue
To, co odkryłem, to że używanie GLib jest lepsze dla celów przenośności, ale POSIX mq ma tę zaletę, że może je wybrać lub sondować.
Jednak nie znalazłem żadnych informacji o tym, czyj wydajność jest lepsza.
Bardzo interesujące. Przegrałem twoją odpowiedź i pytanie, być może teraz pozwoli ci opublikować wykresy. – kalev
Przeprowadziłem kilka dodatkowych eksperymentów: dodałem sygnalizację między wątkami, aby poinformować konsumenta, że dane zostały wyprodukowane. Użyłem techniki eventfd Linux. I tak szybko, jak to zrobiłem, zobaczyłem, że działanie GAsyncQueue pogarsza się, aby być podobnym do innych. – dbikash
Czy daje to wyjaśnienie wyników? Wszystkie mechanizmy IPC linuxa przechodzą przez jądro i dlatego mają podobną wydajność. GAsyncQueue ma w jakiś sposób implementację przestrzeni użytkownika - dodatkowa przestrzeń użytkownika - zapobiega kopiowaniu przestrzeni jądra, co skutkuje lepszą wydajnością. I zaraz po dodaniu mechanizmu eventfd ponownie pojawia się jądro. Czy to zrozumienie jest poprawne? – dbikash