Все современные операционные системы, работающие на аппаратном обеспечении ПК, уже имеют свои сетевые стеки, сильно оптимизированные для многоядерных процессоров.Например, код обработки пакетов, который передает данные в сетевую карту и из нее, будет независимым от кода стека TCP / IP, поэтому аппаратное прерывание может выполняться до конца, не нарушая код TCP.
Для большинствахотя в реальных приложениях основная часть работы выполняется между пакетами.Входящие данные должны быть обработаны, а выходящие данные должны быть сгенерированы.Это зависит от кода приложения, и этот код может использовать преимущества нескольких ядер, используя несколько потоков или несколько процессов.То, как вы это делаете лучше всего, зависит от приложения и операционной системы.Например, Windows имеет порты завершения ввода / вывода , которые сочетают обнаружение заданий с многопоточной отправкой заданий.Linux имеет epoll .