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.Einstellung der Post-Queue-Größe mit Boost Asio?
Allerdings hat der Hauptthread Millionen Dinge 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 für diese in der Boost-ASIO-Dokumentation. Ist das möglich?
Das Problem ist nicht, dass das ist 'io_service' stoppt, bevor die Arbeiten erledigt --- wir kennen das' Werk' Objekt über das Löschen der 'io_service' zu stoppen anmutig zu machen. Das Problem ist, dass der 'io_service' zu viele Aufgaben ansammeln lässt. Wir möchten die Anzahl der nicht zugewiesenen Aufgaben auf eine Weise beschränken, die nicht das Abfragen des Threads erfordert, der die Aufgaben erstellt, daher unsere Frage, ob 'poll()' zum Blockieren gebracht werden kann. – uckelman