В вашей текущей системе и игнорируя время файлового ввода-вывода, один процессор всегда делает что-то полезное, если есть что-то полезное, и ждет готовности к работе, если ничего полезного не нужно делать. Если бы это была однопроцессорная (одноядерная) система, вы бы максимально увеличили пропускную способность. Часто это очень хорошая схема, особенно для FTP-сервера, на котором обычно нет человека, ожидающего пакет за пакетом.
Вы также минимизировали среднюю задержку (для однопроцессорной системы). Чего у вас нет, так это постоянной задержки. Измерение производительности вашей системы, скорее всего, покажет большое количество джиттера – сильное изменение времени, необходимого для обработки пакета. Опять же, поскольку это FTP, а не управление процессом в реальном времени или взаимодействие с человеком, джиттер может не быть проблемой.
Теперь, однако, учтите, что в вашей системе, вероятно, доступно более одного процессора и что время ввода-вывода и время обработки могут перекрываться.
Чтобы в полной мере воспользоваться преимуществами многопроцессорной (ядерной) системы, вам потребуется параллелизм.
Обычно это приводит к использованию нескольких потоков, но можно добиться параллелизма с помощью асинхронного (неблокирующего) чтения и записи файлов.
Однако добавление нескольких потоков в программу открывает огромные возможности для червей.
Если вы решите пойти по маршруту MT, я бы посоветовал вам подумать о зависимости от библиотеки ввода-вывода с поддержкой потоков. QT может предоставить это для вас (я не уверен). Если нет, взгляните на boost:: asio (или ACE для более старого, но все еще надежного решения). Вы обнаружите, что использование возможностей машинного перевода такой библиотеки требует значительных затрат времени на обучение; однако, как оказалось, время добавить многопоточность «вручную» и сделать это правильно еще хуже.
Поэтому я бы сказал, что оставайтесь с вашим существующим решением, если вы не беспокоитесь о неиспользуемых циклах процессора и/или джиттере, и в этом случае начните изучать поддержку многопоточности QT или boost::asio.
person
Dale Wilson
schedule
26.02.2013