Sto usando boost::asio::io_service
come un pool di thread di base. Alcuni thread vengono aggiunti a io_service, il thread principale inizia a postare i gestori, i thread worker iniziano ad eseguire i gestori e tutto finisce. Fin qui tutto bene; Ottengo una bella accelerazione rispetto al codice a thread singolo.Impostazione del limite sulle dimensioni della coda di post con Boost Asio?
Tuttavia, il thread principale ha milioni di cose da pubblicare. E continua a postarli, molto più velocemente di quanto i thread worker possano gestirli. Non colgo i limiti di RAM, ma è ancora piuttosto stupido essere in agguato così tante cose. Quello che mi piacerebbe fare è avere una dimensione fissa per la coda del gestore e avere un blocco post() se la coda è piena.
Non vedo alcuna opzione per questo nei documenti ASIO Boost. È possibile?
Il problema non è che il 'io_service' si arresta prima di completare il lavoro --- sappiamo dell'eliminazione dell'oggetto' work' per fare in modo che il 'io_service' si arresti con garbo. Il problema è che il 'io_service' consente di accumulare troppe attività. Vorremmo limitare il numero di attività non assegnate in un modo che non implichi il polling sulla parte del thread che crea le attività, da qui la nostra domanda sull'opportunità di bloccare 'poll()'. – uckelman