У меня есть критическое приложение, которое обрабатывает большие объемы сжатых файлов (.gz → .csv → Split → .gz). Первоначальное профилирование показывает ввод-ввод файла в качестве узкого места, поэтому мне нужны истинные асинхрологические ввод-ввод на уровне ОС без дополнительных накладных расходов.
Код: Выделить всё
#include
#include
boost::asio::io_context io_context;
boost::asio::windows::random_access_handle file(io_context);
// Open file with FILE_FLAG_OVERLAPPED
HANDLE h = CreateFileA("test.txt", GENERIC_READ, FILE_SHARE_READ,
nullptr, OPEN_EXISTING,
FILE_FLAG_OVERLAPPED | FILE_ATTRIBUTE_NORMAL, nullptr);
file.assign(h);
// Async read
std::vector buffer(8192);
file.async_read_some_at(0, boost::asio::buffer(buffer),
[](boost::system::error_code ec, std::size_t bytes_read) {
// Handle completion
});
io_context.run();
[*] boost :: asio :: windows :: random_access_handle на самом деле вызовет readfileex () или readfile () с внутренними структурами? /> do boost.afio и llfio также используют Windows, перекрытые ввод/вывода, или они используют различные механизмы асинхронности? В очереди в пуле потоков?
[*] Есть ли какие -либо флаги компиляции или проверки времени выполнения, чтобы подтвердить, что эти библиотеки используют асинхронизированные файлы Windows? />
- Проверенная документация boost.asio, boost.afio и llfio (неясно о внутренней сведениях о реализации)
- Используемый процесс монитора для наблюдения за файлом I/O (неубедительно на перекрывании VS Leaded I/O)
/> Профилирован визуальной студией (показывает асинхродическое поведение, но не может подтвердить, если он перекрыт ввод/выводы) - исследовал некоторые исходные код, но слои абстракции затрудняют отслеживание на фактические вызовы Windows
/> среда < /h2>
Windows 11 < /p>
< /li>
Visual Studio 2022 < /p>
< /li>
boost 1.82 < /p>
< /li>
. File_flag_overlapped
Подробнее здесь: https://stackoverflow.com/questions/797 ... le-io-in-c
Мобильная версия