2

是否有任何数据结构/语言/算法/操作系统/等可以将 o(1) 事件/数据发布到 n 个项目?通常,当人们看到 pubsub 实现时,它涉及遍历订阅者列表并在它们上触发函数。

是否有任何平台/语言可以更即时地通知 n 个项目?在操作系统级别甚至是否存在任何方法来实现这一点?

我倾向于相信这是不可能的,但我对操作系统/硬件的了解有限,我想知道是否有一些“幕后”可以实现这一点。

我问的理由

我知道这有点“外面”——但是阅读了一些关于脑细胞/神经元的知识,以及神经元通过电荷可以通过其轴突向 n 个接收器发送电/信息这一事实,这将是有意义的我认为这可以被模仿,以便在硬件级别向 n 个订阅者提供 o(1) pub,并由操作系统对其进行调度等。

所以我想知道这是否会在现代硬件/操作系统的任何地方以一种或另一种形式发生,特别是如果它可以与自定义回调挂钩。

4

4 回答 4

3

您也可以通过让订阅者发布来进行 O(log(n)) 通知:发布者通知 2 个订阅者,每个订阅者通知 2 个订阅者,每个订阅者通知 2 个订阅者,等等。

您可以执行 O(1)“通知”,但它涉及订阅者轮询,并且可能不是您所追求的。发布者写入共享数组,订阅者轮询 array[i];当发布者写入数组 [i] 时,订阅者读取数据,然后轮询数组 [i+1] 等。您还可以让订阅者在读取数组 [i] 时通知发布者,以便当发布者收到来自所有订阅者的通知时,它可以在 array[i] 处释放数据 - 这使您可以使用循环缓冲区而不是持续增长的数组。(您可以让订阅者在 array[i] 上阻塞而不是对其进行轮询,但随后您又回到让每个订阅者的发布者回调以结束其阻塞。)

于 2013-06-08T19:35:24.640 回答
1

Here are ways I can think of ..

1. Linear: O(n) Total Time ~ Linear execution on a machine with single processor

2. Parallel: O(n/k) Total Time ~ Parallel execution on a machine with k processors

3. Distributed hierarchical: O(m) Time for each node in the hierarchy, O(n) Total Time; where m describe the M-ary hierarchy of processors

4. Parallel Distributed hierarchical: O(1) Time for each node in the hierarchy, O(m^h - mh) Total Time (which is basically number of non-leaf nodes); where h is the hierarchy height, and each node in the hierarchy has m processors

于 2013-06-09T04:50:28.513 回答
0

我认为你在这里弄得有点乱。通知 N 个订阅者的渐近时间复杂度将至少为 O(N),因为,嗯,有 N 个订阅者,所有订阅者都需要通知。

您可以通过并行执行操作来节省实际时间(正如@Zim-Zam 建议的那样),但它不会改变渐近时间复杂度。

人脑也是一样,要通知500万个神经元,一下子做不出来……

于 2013-06-08T22:03:43.967 回答
0

网络上的硬件多播是一个 O(1) 事件发布到网络上正在侦听多播的所有机器。所有以太网网络都支持这一点。

根据网络设计,还有可能更接近 O(log(n) 的IP多播

IP 多播是一种通过网络中的 IP 基础设施进行一对多和多对多实时通信的技术。它通过既不需要接收者身份的先验知识也不需要接收者数量的先验知识来扩展到更大的接收者群体。组播通过要求源仅发送一次数据包来有效地使用网络基础设施,即使它需要传送给大量接收器。网络中的节点(通常是网络交换机和路由器)负责复制数据包以到达多个接收器,以便消息仅通过网络的每个链路发送一次。

因此,如果每个订户在不同的计算机上,则可以这样做,如果每个订户在同一台​​计算机内的不同 CPU 上,这将取决于计算机的内部设计。

于 2014-03-01T15:57:48.353 回答