Sembra che Linux non implementa pthread_suspend e continui, ma ho davvero bisogno di em.linux pthread_suspend
Ho provato cond_wait, ma è troppo lento. Il lavoro di threading esegue per lo più in 50us ma occasionalmente esegue verso l'alto di 500ms. Il problema con cond_wait è duplice. Il blocco mutex sta prendendo tempi comparabili alle micro seconde esecuzioni e non ho bisogno di essere bloccato. In secondo luogo, ho molti thread di lavoro e non voglio davvero creare variabili di condizione N quando hanno bisogno di essere risvegliati.
Io so esattamente quale thread è in attesa di quale lavoro e potrei semplicemente pthread_continue quel thread. Un thread sa quando non c'è più lavoro e può facilmente pthread_suspend se stesso. Ciò non userebbe il blocco, eviterebbe la fuga precipitosa e sarebbe più veloce. Il problema è .... no pthread_suspend o _continue.
Qualche idea?
Invia pezzi di lavoro più grandi ai thread, in modo che il costo del blocco diventi un overhead% inferiore? (I thread trascorrono più tempo a lavorare e meno tempo a delegare il lavoro?) – Thanatos
Il lavoro è grande ... a volte. Non posso dirlo finché non lo provi. E ho spedito il lavoro in un modo che non ha bisogno di bloccare affatto ... se non ho capito il modo ottimale a basso costo di sospendere e riattivare i thread senza bloccare ... cond_wait blocca un mutex per ogni thread che è risvegliato. Inoltre non ti permette di svegliare solo un thread. Beh, potrei fare una condizione per ogni filo .... argh ... Ci dev'essere un modo migliore. cond_wait sembra adatto per un thread utente gui, ma non per le transazioni ad alta velocità. – johnnycrash
Domani guarderò il codice sorgente per cond_wait oltre a perf per test i metodi pipe e pipe vs cond wait. – johnnycrash