为什么网络I / O序列化而不是并行化?
答案 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内核文档,网络驱动程序正在使用ksoftirqd来实现发送数据。所以这是CPU核心级别的并行化。
在网卡上,有多个“频道” - 尤其适用于高速网卡。所有这些都可以同时处理数据的接收和传输 - 再次在网卡级别进行并行化。例如:
http://www.colfaxdirect.com/store/pc/viewPrd.asp?idproduct=230&idcategory=0
(寻找“多渠道”)。
但是当它到达以太网线时,由于它们都共享相同的线路,因此需要在线路级别进行串行化。但是,线路的带宽通常比CPU或以太网卡的处理速度高很多。