Estou completamente confuso com o que acabei de ler nestas duas páginas:
link link
Ambos afirmam que o IO assíncrono SCSI é mais lento do que o síncrono. Por quê? Por que alguém se importaria em escrever procedimentos assíncronos apenas para perder desempenho?
Isso contradiz minha expectativa!
Especialmente que, no caso de SSD, estou usando o libaio para ler de forma assíncrona para obter um desempenho muito melhor.
Além disso, a primeira lista é síncrona como send send send wait espera wait ... Isso é exatamente o que assíncrona é no caso da libaio.
Alguém pode lançar uma luz sobre isso para mim, por favor?!
Editar 1
Deixe-me esclarecer meu problema. Eu posso ter um problema com a compreensão correta de uma diferença entre IO assíncrona e síncrona.
-
Síncrono : aguarda que cada operação seja concluída
-
Assíncrono : ele nunca espera que cada operação seja concluída
Agora, eu diria que se eu tivesse que ler seqüencialmente alguns shows de dados, lendo-os em um simples loop síncrono:
while ( num_blocks-- > 0 )
read_block() ;
Teria um tipo de consulta "solicitar, pausar, solicitar". Praticamente vejo que, se eu alterá-lo para o procedimento multithreaded, abranger vários threads (6-8) que precisariam de 'próximo local para ler' e, em seguida, solicitá-lo, conseguiria um desempenho quase máximo de leitura.
Algo parecido com isto:
struct request
{
...
boost::mutex mutex ;
uint64_t block ;
uint64_t get_block_location()
{
boost::mutex::scoped_lock lock( mutex ) ;
return block++ ;
}
} ;
void readth( request* r )
{
try
{
for( ;; )
{
read_block( r->get_block_location()) ;
}
}
catch( const FinishedException& )
{}
}
Eu pensei, e agora, eu acho que comecei a entender depois de repensar o que acabei de ler com a ajuda do @Robert Harvey, que async / sync é apenas uma questão de 'economizar tempo' esperando o resultado. .
Estou deixando esta questão apenas no caso de alguém ter problemas cognitivos como o meu!