В Linux демультиплексирование нескольких сокетов с использованием epoll
- это самый быстрый из возможных способов параллельного ввода-вывода по TCP.
Но я также упомяну, что в интересах переносимости (и, поскольку вы, похоже, интересуетесь либо Linux, либо Windows), вам следует заглянуть в Boost.Asio. Он имеет переносимый API, но использует epoll
в Linux и перекрывающийся ввод / вывод в Windows, поэтому вы можете создавать высокоэффективные и портативные сетевые приложения.
Кроме того, поскольку вы работаете с файлами, вы должны также реализовать двойную буферизацию при выполнении операций ввода-вывода для максимальной производительности. Другими словами, вы отправляете / извлекаете каждый файл, используя два буфера. Например, на отправляющей стороне вы читаете с диска в один буфер, а затем отправляете этот буфер по сети, в то время как другой поток считывает следующий блок данных с диска во второй буфер. Таким образом, вы перекрываете дисковый ввод-вывод с сетевым вводом-выводом.