Ich verwende boost::asio::io_service
als Basis-Thread-Pool. Einige Threads werden zu io_service hinzugefügt, der Hauptthread beginnt Handler zu schreiben, die Worker-Threads starten die Handler und alles wird beendet. So weit, ist es gut; Ich bekomme eine schöne Beschleunigung über Singlethread-Code.
Der Hauptthread hat jedoch Millionen von Dingen zu posten. Und es schreibt sie einfach viel schneller, als die Worker-Threads damit umgehen können. Ich treffe RAM-Grenzen nicht, aber es ist immer noch dumm, so viele Dinge in die Warteschlange zu stellen. Ich möchte eine feste Größe für die Handler-Warteschlange und einen post () - Block haben, wenn die Warteschlange voll ist.
Ich sehe keine Optionen dafür in den Boost ASIO-Dokumenten. Ist das möglich?
Ich verwende den Semaphor, um die Warteschlangengröße der Handler zu korrigieren. Der folgende Code veranschaulicht diese Lösung:
%Vor%Sie könnten das Strang-Objekt verwenden, um die Ereignisse zu setzen und eine Verzögerung in Ihrem Haupt-Objekt zu erzeugen? Fällt Ihr Programm aus, nachdem alle Arbeiten veröffentlicht wurden? Wenn ja, können Sie das Arbeitsobjekt verwenden, das Ihnen mehr Kontrolle darüber gibt, wann Ihr io_service aufhört.
Sie könnten immer den Zustand der Threads überprüfen und warten, bis einer frei wird oder so.
// Links
%Vor%hoffe das hilft.
Tags und Links c++ boost-asio threadpool