2010-01-24 2 views
0

Почему сетевой ввод-вывод сериализован и не распараллелен?Сетевой ввод-вывод сериализован

+1

Вы видели количество проводников в сетевом кабеле? – Joe

+0

Этот вопрос может иметь несколько значений. Вы имеете в виду физический ввод-вывод или программный API? – slebetman

ответ

1

Ну, фактические типы пакетов : (они могут принимать разные маршруты, например), но в какой-то момент вам понадобится поток, в котором вы читаете данные в том же порядке, который вы ставите это в том, что является ключевым пунктом TCP. Как еще вы это сделаете?

Вы всегда можете использовать отдельные разъемы, чтобы обеспечить дополнительный параллелизм? Или я неправильно понял ваш смысл?

Некоторые сетевые протоколы предлагают «вещания», но это не всегда доступны (например, многих сетевых устройств, таких нарочито быть сконфигурированы, чтобы блокировать UDP вещание)

0

яблоки и апельсины.

Serializing - это когда вы берете некоторые структурированные данные и выравниваете их в единую последовательность данных, которые могут быть легко переданы и затем десериализованы на другом конце для воссоздания исходной структуры.

Parallelizing - это когда вы делите задачу на несколько подзадач, которые могут выполняться одновременно, а затем объединяйте их результаты, чтобы получить то же самое, что и задача, выполняемая одним процессом.

Таким образом, распараллеливание не может заменить сериализацию, поскольку они используются для разных целей.

0

Поскольку разъемы для пайки кабеля дороже, чем увеличение мощности процессора (или для добавления более сложных микросхем для увеличения скорости линии). Сравните типы кабелей, которые обычно используются для связи в течение многих лет:

Параллельный кабель Centronics - 36 контактов.

кабель RS232 25 булавки, затем 9 штифты

Ethernet, витая пара - две пары (4 пин)

кабель USB - одна пара + питания.

Кроме того, переносить несколько каналов в паралелине по беспроводной или междугородной линии непросто.

+0

Не могли бы вы объяснить, какие проблемы связаны с попыткой отправить данные в параллельных каналах по беспроводной сети на большие расстояния? – Aastha

0

Подумайте, как поток данных. Данные могут быть упорядочены и отправлены/получены неупорядоченным способом. Чтобы восстановить исходный поток, необходимо переупорядочить куски.

+0

Пакеты, передаваемые по сети, могут путешествовать по разным маршрутам. Как сохраняется последовательность при получении пакетов? Насколько я знаю, пакеты нумеруются - будет ли нумерация не помогать в повторной сборке сообщения на конце получателя, даже если пакеты отправляются параллельно? Это может быть непригодно для потоковой передачи данных, но данные, такие как письма и т. Д., Могут быть распараллелены. – Aastha

0

Во-первых, моя нынешняя машина AMD работает Ubuntu Linux с 6CPU-ядра, и «пс -ef» дал:

ps -ef 
UID  PID PPID C STIME TTY   TIME CMD 
root   1  0 0 Apr18 ?  00:00:01 /sbin/init 
root   2  0 0 Apr18 ?  00:00:00 [kthreadd] 
root   3  2 0 Apr18 ?  00:00:00 [migration/0] 
root   4  2 0 Apr18 ?  00:00:00 [ksoftirqd/0] 
root   5  2 0 Apr18 ?  00:00:00 [watchdog/0] 
root   6  2 0 Apr18 ?  00:00:00 [migration/1] 
root   7  2 0 Apr18 ?  00:00:00 [ksoftirqd/1] 
root   8  2 0 Apr18 ?  00:00:00 [watchdog/1] 
root   9  2 0 Apr18 ?  00:00:00 [migration/2] 
root  10  2 0 Apr18 ?  00:00:00 [ksoftirqd/2] 
root  11  2 0 Apr18 ?  00:00:00 [watchdog/2] 
root  12  2 0 Apr18 ?  00:00:00 [migration/3] 
root  13  2 0 Apr18 ?  00:00:00 [ksoftirqd/3] 
root  14  2 0 Apr18 ?  00:00:00 [watchdog/3] 
root  15  2 0 Apr18 ?  00:00:00 [migration/4] 
root  16  2 0 Apr18 ?  00:00:00 [ksoftirqd/4] 
root  17  2 0 Apr18 ?  00:00:00 [watchdog/4] 
root  18  2 0 Apr18 ?  00:00:00 [migration/5] 
root  19  2 0 Apr18 ?  00:00:00 [ksoftirqd/5] 
root  20  2 0 Apr18 ?  00:00:00 [watchdog/5] 
root  21  2 0 Apr18 ?  00:00:00 [events/0] 
root  22  2 0 Apr18 ?  00:00:00 [events/1] 
root  23  2 0 Apr18 ?  00:00:00 [events/2] 
root  24  2 0 Apr18 ?  00:00:00 [events/3] 
root  25  2 0 Apr18 ?  00:00:00 [events/4] 
root  26  2 0 Apr18 ?  00:00:00 [events/5] 
root  27  2 0 Apr18 ?  00:00:00 [cpuset] 
root  28  2 0 Apr18 ?  00:00:00 [khelper] 
root  29  2 0 Apr18 ?  00:00:00 [async/mgr] 
root  30  2 0 Apr18 ?  00:00:00 [sync_supers] 
root  31  2 0 Apr18 ?  00:00:00 [bdi-default] 
root  32  2 0 Apr18 ?  00:00:00 [kintegrityd/0] 
root  33  2 0 Apr18 ?  00:00:00 [kintegrityd/1] 
root  34  2 0 Apr18 ?  00:00:00 [kintegrityd/2] 
root  35  2 0 Apr18 ?  00:00:00 [kintegrityd/3] 
root  36  2 0 Apr18 ?  00:00:00 [kintegrityd/4] 
root  37  2 0 Apr18 ?  00:00:00 [kintegrityd/5] 
root  38  2 0 Apr18 ?  00:00:00 [kblockd/0] 
root  39  2 0 Apr18 ?  00:00:00 [kblockd/1] 
root  40  2 0 Apr18 ?  00:00:00 [kblockd/2] 
root  41  2 0 Apr18 ?  00:00:00 [kblockd/3] 
root  42  2 0 Apr18 ?  00:00:00 [kblockd/4] 
root  43  2 0 Apr18 ?  00:00:00 [kblockd/5] 
root  44  2 0 Apr18 ?  00:00:00 [kacpid] 
root  45  2 0 Apr18 ?  00:00:00 [kacpi_notify] 
root  46  2 0 Apr18 ?  00:00:00 [kacpi_hotplug] 
root  47  2 0 Apr18 ?  00:00:00 [ata/0] 
root  48  2 0 Apr18 ?  00:00:00 [ata/1] 
root  49  2 0 Apr18 ?  00:00:00 [ata/2] 
root  50  2 0 Apr18 ?  00:00:00 [ata/3] 
root  51  2 0 Apr18 ?  00:00:00 [ata/4] 
root  52  2 0 Apr18 ?  00:00:00 [ata/5] 

С выше, и можно увидеть, что многие из процессов ядра являются пер- cpu-core - включая ksoftirqd. Изучите документацию ядра Linux, сетевые драйверы используют ksoftirqd для реализации отправки данных. Таким образом, это распараллеливание на уровне ядра процессора.

На сетевой карте есть несколько «каналов» - особенно для высокоскоростных сетевых карт. И все это может обрабатывать прием и передачу данных одновременно - снова распараллеливание на уровне сетевой карты. Например:

http://www.colfaxdirect.com/store/pc/viewPrd.asp?idproduct=230&idcategory=0

(ищите "многоканальный").

Но когда он достигает провода Ethernet, так как все они имеют один и тот же провод ..... необходима сериализация на уровне провода. Но тогда полоса пропускания провода обычно намного выше, чем скорость обработки CPU или ethernet-карты.

Смежные вопросы