Networking 网络I/O序列化
为什么网络I/O是串行化的而不是并行化的?好吧,实际的数据包类型是(例如,它们都可以采用不同的路由),但在某个点上,您将需要一个流,在该流中,您以与放入数据相同的顺序读取数据-这是TCP的一个关键点。否则你会怎么做 您总是可以使用单独的套接字来提供额外的并行性?还是我误解了你的意思 一些网络协议确实提供“广播”,但这并不总是可用的(例如,许多网络设备,如将故意配置为阻止UDP广播)苹果和橙子 是指当您获取一些结构化数据并将其展平为单个数据序列时,这些数据序列可以轻松传输,然后在另一端反序列化以重新创建原始结构 是指将一个任务划分为几个可以同时运行的子任务,然后将它们的结果合并以获得相同的结果,就像该任务由单个进程运行一样Networking 网络I/O序列化,networking,io,Networking,Io,为什么网络I/O是串行化的而不是并行化的?好吧,实际的数据包类型是(例如,它们都可以采用不同的路由),但在某个点上,您将需要一个流,在该流中,您以与放入数据相同的顺序读取数据-这是TCP的一个关键点。否则你会怎么做 您总是可以使用单独的套接字来提供额外的并行性?还是我误解了你的意思 一些网络协议确实提供“广播”,但这并不总是可用的(例如,许多网络设备,如将故意配置为阻止UDP广播)苹果和橙子 是指当您获取一些结构化数据并将其展平为单个数据序列时,这些数据序列可以轻松传输,然后在另一端反序列化以重
因此,并行化不能取代串行化,因为它们用于不同的目的。因为焊接电缆连接器比增加更多处理器电源(或增加更复杂的芯片以提高线路速度)更昂贵。比较多年来通常用于通信的电缆类型: Centronics并行电缆-36针 RS232电缆25针,然后9针 以太网双绞线-两对(4针) USB电缆-一对+电源
此外,通过无线或远距离并行传输多个通道并不容易。将其视为数据流。数据可以分块并以无序方式发送/接收。
要重建原始流,块必须重新排序 首先,我现在的AMD机器运行的是具有6CPU内核的Ubuntu Linux,“ps-ef”给出了: 从上面可以看出,很多内核进程都是基于cpu内核的,包括ksoftirqd。查看linux内核文档,网络驱动程序正在使用ksoftirqd来实现数据的发送。这就是CPU核心级的并行化 在网卡上,有多个“通道”——特别是高速网卡。所有这些都可以同时处理数据的接收和传输——再次在网卡级别实现并行化。例如: (寻找“多通道”)
但是当它到达以太网线时,因为它们都共享同一条线……在线级别上的序列化是必要的。但是,导线的带宽通常远高于CPU或以太网卡的处理速度。您看到网络电缆中导线的数量了吗?这个问题可能有多种含义。您指的是物理I/O还是软件API?请您解释一下,在远距离无线并行信道中发送数据时,会遇到哪些问题?通过网络传输的数据包可能会在不同的路径上传输。如何在接收数据包时保持顺序性?据我所知,数据包是经过编号的——即使数据包是并行发送的,这种编号是否也无助于在接收方端重新组装消息?这在流数据中可能没有用处,但邮件等数据可以并行化。
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]