Могут ли сетевые устройства работать параллельно?

Всех с новым годом! Я создал несколько потоков с помощью pthreads (столько, сколько логических ядер у проца.) настроил в каждом socket ориентированный на отдельные сетевые подключения и одновременно во всех потоках стал писать в открытые tcp-сессии. На прикладном-программном уровне это выглядит как параллельная переда данных. Позволят ли провернуть такой фокус операционная система, драйвера, железо и сетевые карты? Т.е. в одну единицу времени из всех карт будут сочиться биты данных?
В приделах процессора и оперативной памяти я знаю что параллельность вычислений не псевдопараллельная, сам проверял с помощью старого-доброго замера времени выполнения, как поведут себя в этой ситуации вся остальная периферия для меня загадка!
  • Вопрос задан
  • 1530 просмотров
Решения вопроса 2
@rPman
Вы используете tcp, значит организовать можно как угодно, 'биты будут сочиться'

Мало того, чтобы утилизировать несколько сетевых устройств, потоки создавать не обязательно, если использовать асинхронные сокеты (в linux это зовется неблокирующие, флаг socket() - SOCK_NONBLOCK), любым удобным для вас инструментом, то простая передача данных не потребует особых ресурсов и спокойно отработает на одном ядре (исключение - 10+гбитный поток, ну может речь уже должна идти о 100+гбит? это на грани возможностей железа и для него нужно использовать специализированные инструменты, предоставляемые сетевой картой, а значит про tcp придется забыть, хотя хз может там все уже удобно сделали)
Ответ написан
Комментировать
@asmelnik
Практически любой современный физический интерфейс на компьютере --ПОСЛЕДОВАТЕЛЬНЫЙ: USB, Ethernet (100/1000/2500/5000/10000 Мбит), PON, SATA... (параллельные LPT и IDE(PATA) давно сошли со сцены)
Т.е. сколько физически (Но не логически) интерфейсов вы задействуете, столько и получите одновременных потоков.
При этом если USB -- то это шина, т.е.в каждый момент времени только одно устройство передает данные. И сколько бы вы устройств на одну шину не повесили -- физически это один поток данных.
Если что-то хотите передавать в сеть в реальные 16 или 32 потока -- вам надо соответствующее количество физических интерфейсов.
Но возникает вопрос "зачем"??
Не просто так от параллельных интерфейсов перешли на последовательные :)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Я правильно понимаю, что ваше приложение биндится на всех интерфейсах и в несколько потоков через них передаёт данные? Если с другой стороны такое поведение нормально обрабатывается приложением - почему бы и нет. На сетевом уровне это в любом случае будет выглядеть просто как несколько TCP-коннектов.

Другое дело, что реализовывать это на прикладном уровне - лютый низкопроизводительный велосипед. Хотите агрегацию пропускной способности каналов - для этого уже давно придумали бондинг или mptcp.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы