Я полностью смущен тем, что я только что прочитал на этих двух страницах:

http://www.scsifaq.org/scsifaq.html#_Hlk410546176 http://www.cse.scu.edu/~tschwarz/coen180/LN/scsi.html

Оба утверждают, что асинхронный ввод-вывод SCSI медленнее, чем синхронный. Как так? Зачем кому-то писать асинхронную процедуру только для потери производительности?

Это противоречит моим ожиданиям!

Тем более, что в случае SSD я использую libaio для асинхронного чтения, чтобы получить гораздо лучшую производительность.

Кроме того, первый список синхронен как отправка отправка отправка ожидание ожидание ожидания ... Это именно то, что асинхронный в случае libaio.

Кто-нибудь может пролить свет на это для меня, пожалуйста ?!

Редактировать 1

Позвольте мне прояснить мою проблему. У меня может быть проблема с правильным пониманием разницы между асинхронным и синхронным вводом-выводом.

  • Синхронный: он ожидает завершения каждой операции
  • Асинхронный: он никогда не ждет завершения каждой операции

Теперь я хотел бы предположить, что если бы мне пришлось читать последовательно несколько гигабайт данных, читая их в простом синхронном цикле:

while ( num_blocks-- > 0 )
    read_block() ;

Будет иметь тип «запрос, пауза, запрос». Практически я вижу, что если я изменю это на многопоточную процедуру, охватив несколько (6-8) потоков, которые возьмут «следующее место для чтения» и затем запросят его, я смогу получить почти максимальную производительность чтения.

Что-то вроде этого:

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& )
    {}
}

Я подумал, и теперь, думаю, я начинаю понимать это после переосмысления того, что я только что прочитал, с помощью @Robert Harvey, что асинхронизация / синхронизация - это всего лишь вопрос «экономии времени» при ожидании результата ...

Я оставляю этот вопрос на тот случай, если у кого-то возникнут когнитивные проблемы, как у меня!

1 ответ1

2

Асинхронный ввод-вывод не связан с повышением скорости работы диска. Вы не можете сделать это, сделав ввод / вывод асинхронным; Дисковые пластины вращаются с одинаковой скоростью независимо от способа выполнения вызовов ввода-вывода.

Цель асинхронного ввода-вывода - дать возможность идти и делать другие вещи, пока вы ожидаете данных. Хотя это может показаться улучшением производительности, на самом деле вы освобождаете процессор от необходимости простаивать, пока поступают данные.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .