O(1)事件发布给N个订阅者

时间:2013-06-08 19:01:49

标签: algorithm programming-languages operating-system complexity-theory publish-subscribe

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

是否有任何平台/语言可以对n个项目进行更快速的通知?在操作系统级别,是否存在任何实现此目的的手段?

我倾向于认为它不可能,但我对操作系统/硬件的了解有限,我想知道是否有什么东西"引擎盖下#34;这可以实现这个目标。

我要求的理由

我知道这有点"在那里" - 但是已经阅读了一些关于brain cells/neurons,以及通过电荷的神经元可以通过其轴突发送电力/信息的事实对于n个接收器,我可以模仿这个,以便在硬件级别为n个订户提供o(1)pub,并安排OS等等。

所以我想知道这种情况是在现代硬件/操作系统中以某种形式发生的,特别是如果它可以与自定义回调挂钩。

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

以下是我能想到的方法..

<强> 1。线性: O(n)总时间〜具有单个处理器的计算机上的线性执行

<强> 2。并行: O(n/k)总时间〜在具有k个处理器的计算机上并行执行

第3。分布式分层: O(m)层次结构中每个节点的时间,O(n)总时间;其中m描述M-ary处理器层次结构

<强> 4。并行分布式分层: O(1)层次结构中每个节点的时间O(m^h - mh)总时间(基本上是非叶子节点的数量);其中h是层次结构高度,层次结构中的每个节点都有m个处理器

答案 2 :(得分:0)

我觉得你在这里搞得太乱了。通知N个用户的渐近时间复杂度至少为O(N),因为有N个用户,所有用户都需要通知。

你可以通过并行处理来保存实际世界时间(如@ Zim-Zam建议的那样),但它不会改变渐近时间复杂度。

同样适用于人类大脑,如果你想通知500万个神经元,你将无法立即做到这一点......

答案 3 :(得分:0)

网络上的硬件多播是向正在侦听多播的网络上的所有计算机发布O(1)事件。所有Ethernet网络都支持此功能。

还有IP multicast可能更靠近O(log(n),具体取决于网络设计

  

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

因此,如果每个订户都在另一台计算机上,则可以完成,如果每个订户位于同一台计算机的不同CPU上,则取决于计算机的内部设计。