Networking 网络I/O序列化

Networking 网络I/O序列化,networking,io,Networking,Io,为什么网络I/O是串行化的而不是并行化的?好吧,实际的数据包类型是(例如,它们都可以采用不同的路由),但在某个点上,您将需要一个流,在该流中,您以与放入数据相同的顺序读取数据-这是TCP的一个关键点。否则你会怎么做 您总是可以使用单独的套接字来提供额外的并行性?还是我误解了你的意思 一些网络协议确实提供“广播”,但这并不总是可用的(例如,许多网络设备,如将故意配置为阻止UDP广播)苹果和橙子 是指当您获取一些结构化数据并将其展平为单个数据序列时,这些数据序列可以轻松传输,然后在另一端反序列化以重

为什么网络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]