网络I / O序列化

时间:2010-01-24 10:13:54

标签: networking io

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

5 个答案:

答案 0 :(得分:1)

嗯,的实际数据包类型是(例如,它们都可能采用不同的路由),但在某些时候,您将需要一个流,您可以在其中读取数据。你把它放在同一个顺序 - 这是TCP的关键点。你怎么会这样做?

您总是可以使用单独的套接字来提供额外的并行性吗?或者我误解了你的意思?

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

答案 1 :(得分:0)

苹果和橘子。

Serializing是指您获取一些结构化数据并将其展平为单个数据序列,这些数据可以轻松传输,然后在另一端反序列化以重新创建原始结构。

Parallelizing是在几个可以同时运行的子任务中划分任务,然后将它们的结果组合起来,就像任务由一个进程运行一样。

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

答案 2 :(得分:0)

因为焊接电缆连接器比添加更多处理器电源(或添加更复杂的芯片以获得更高的线速度)更昂贵。比较通常用于多年通信的电缆类型:

Centronics并行电缆 - 36针。

RS232电缆25针,然后9针

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

USB线 - 一对+电源。

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

答案 3 :(得分:0)

将其视为数据流。数据可以以无序方式分块和发送/接收。 为了重建原始流,必须重新排序块。

答案 4 :(得分:0)

首先,我目前的AMD机器正在运行带有6CPU核心的Ubuntu Linux,“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]

从上面,你可以看到很多内核进程都是per-cpu-core - 包括ksoftirqd。查看linux内核文档,网络驱动程序正在使用kso​​ftirqd来实现发送数据。所以这是CPU核心级别的并行化。

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

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

(寻找“多渠道”)。

但是当它到达以太网线时,由于它们都共享相同的线路,因此需要在线路级别进行串行化。但是,线路的带宽通常比CPU或以太网卡的处理速度高很多。