POSIX.1-2008 XRAT 基本原理指出,X/Open STREAMS 可能会从标准的未来版本中删除,并且严格遵守的应用程序不应使用它们,但它没有解释原因。
为什么它们被有效地从标准中删除?
它们是否超出了 POSIX 的范围?以这种方式实现设备驱动程序是否存在缺陷?我觉得 STREAMS 很有趣;我喜欢分层实现设备驱动程序的想法。
答案1
STREAMS 确实包含一个 API。如果这个概念被广泛采用,被便携式应用程序等使用,那么它们肯定会处于标准化范围内。
Linux 黑客口中流传的说法是,STREAMS 在 1994 年就已经消亡,只是为了向后兼容而存在。 (API 的)。
https://lkml.org/lkml/1998/6/28/138
它最初的设计目的也是为了涵盖网络(引用:维基百科)。显然,在 100M/1G 服务器时代,这是网络性能的一个障碍……现在我们有 10G+……
人们说 Linux 网络仍然很慢(试图像 DPDK 那样绕过用户空间)。所以我很高兴我们有一个不强制使用 STREAMS 模型的网络堆栈。
我不熟悉 STREAMS,但原始设计的另一半是终端 IO。至少对于 Linux,你可以说它有点老了,我们有一个可以满足我们需要的界面,而编写额外的功能只会导致不必要的破坏。您已经可以使用以下命令切换中间处理行学科,尽管这似乎将数据转移到另一个子系统而不是提供可交换的过滤器。例如,其中一个学科(PPP)创建了一个网络接口——它与设备节点完全不同。即使结果是一个设备节点,将其宣布为 udev 热插拔设备管理器的给定类型的新设备似乎也很干净。例如,应用串行鼠标规则将创建一个新的输入设备,X 将通过与插入 USB 鼠标完全相同的机制来拾取该设备。
答案2
从用户空间程序员的角度来看,STREAMS 是一个很好的 api,但从内核方面来看,它是一个可怕的 API。它不能以任何远程执行的方式实现。
由于这个原因,实施了 STREAMS 的系统几年前就已经放弃了它。 POSIX 只是记录当前的状况。