2010-01-24 26 views
0

为什么网络I/O序列化并且不是并行化的?网络I/O序列化

+1

您是否看到网线中的导体数量? – Joe 2010-01-24 10:46:47

+0

这个问题可以有多重含义。你是指物理I/O还是软件API? – slebetman 2010-01-24 12:03:49

回答

1

那么,实际的数据包类型的(他们都采取不同的路线,例如),但在某些时候,你会想,你读出来的​​数据在你把相同的顺序流它是 - 成为TCP的关键点。你会怎么做呢?

你总是可以使用不同的套接字来增加并行性吗?或者我误解了你的意思?

一些网络协议确实提供“广播”,但是这并不总是可用的(这样会故意被配置为阻止UDP广播例如,许多网络设备)

0

苹果和桔子。

Serializing是当你采取一些结构化数据,并将其压扁成一个单一的数据序列,可以很容易地传输,然后反序列化在另一端重新创建原始结构。

Parallelizing是将任务分成几个可同时运行的子任务,然后将其结果组合起来以获得相同的结果,就像任务由单个进程运行一样。

因此,并行化不能代替序列化,因为它们被用于不同的目的。

0

由于焊接电缆连接器比增加更多处理器功率(或为更大线速度添加更复杂的芯片)更昂贵。比较多年来通常用于通信的电缆类型:

Centronics并行电缆 - 36针。

RS232电缆25引脚,则9个引脚

以太网双绞线 - 两对(4针)

USB电缆 - 一对+功率。

此外,通过无线或长距离传输多个通道并不容易。

+0

您能解释一下在尝试通过无线并行通道发送长距离数据时涉及哪些问题? – Aastha 2010-01-27 14:23:29

0

认为它是一个数据流。数据可以分块并以无序的方式发送/接收。 要重建原始流,块必须重新排序。

+0

通过网络传输时的数据包可能在不同的路线上传输。在接收数据包时如何保持顺序性?据我所知,数据包被编号 - 即使数据包并行发送,编号是否无助于在接收方端重新组装信息? 这可能对流式传输数据没有用处,但是邮件等数据可以并行处理。 – Aastha 2010-01-27 18:02:04

0

首先,我现在的AMD机器在运行Ubuntu Linux操作系统与6CPU核心,和“PS ​​-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内核文档,网络驱动程序正在使用kso​​ftirqd来实现发送数据。所以这是CPU核心级别的并行化。

在网卡上有多个“通道” - 尤其是高速网卡。所有这些都可以同时处理数据的接收和传输 - 再次在网卡级别进行并行化。例如:

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

(寻找 “多通道”)。

但是,当它到达以太网线,因为他们都共享相同的线.....在线级别的序列化是必要的。但是接线的带宽通常要比CPU或以太网卡的处理速率高很多。