2009-11-25 19 views
14

Richiesto un IPC locale simile a socket. Ho usato named pipe e IO sovrapposto su Windows e voglio riscrivere l'applicazione per potenziare :: ASIO in modo che possa usare anche socket di dominio UNIX.Qualcuno ha fatto un'analisi delle prestazioni di boost :: asio?

Ho recentemente esaminato alcune parti della libreria libevent e so che supporta solo socket() e select() per windows nella versione 1.4. Poiché l'IO sovrapposto è molto efficiente, lasciarlo fuori è ovviamente un tratto inaccettabile che viene indicato nella versione 2 (che è in alpha). Un altro esempio di implementazione sub-ottimale è l'uso di alberi red-black rispetto a prio-queues per la logica di timeout che era adressed da qualche parte lungo la linea.

Qualcuno ha qualche opinione sulle caratteristiche delle prestazioni di boost vs libevent/libev. Ha qualche aspetto indesiderabile abbagliante su alcune piattaforme? Il mio obiettivo per questa domanda è che non voglio bucare la libreria ASIO a meno che non sia assolutamente necessario. Voglio sapere se boost :: asio utilizza le primitive del sistema operativo più ottimali nel modo più ottimale.

+0

Penso che il commento del richiedente su libevent che non supporta l'IO sovrapposto in Windows non è aggiornato. Qualcuno conferma. – unixman83

risposta

4

Anche check this post su un problema di blocco in boost :: asio, che può influire su di te.

+0

grazie frunsi, quel particolare post è stato molto utile. –

8

I test delle prestazioni di asio e il mio impl sulla lettura dei file (my blogpost entry) - in due parole - asio ha mostrato buoni risultati.

+0

grazie> testo casuale <: D –

+0

Si noti che questo test non dimostra prestazioni ASIO sui socket. E non ha paragoni con le sue prestazioni sotto carico pesante. – unixman83

2

A mio parere Boost.Asio è Windows-First, dove la maggior parte delle altre librerie di software libero sono Linux-First. Tuttavia, la qualità di sotto Linux è sempre stata buona. Dal momento che questo software è stato ripreso da 20 persone che non hanno partecipato al suo sviluppo. La velocità sotto Linux con più thread è stata rapidamente migliorata nel momento in cui il richiedente ha posto questa domanda (2009): http://think-async.com/Asio/LinuxPerformanceImprovements

La velocità in Windows è sempre stata buona. La mia più grande lamentela è la progettazione di socket UDP, è mal implementata.