是否有任何数据结构/语言/算法/操作系统/等能够将o(1)事件/数据发布到n个项目?通常,当人们看到pubsub实现时,它涉及遍历订阅者列表并在其上触发函数。
是否有任何平台/语言可以对n个项目进行更快速的通知?在操作系统级别,是否存在任何实现此目的的手段?
我倾向于认为它不可能,但我对操作系统/硬件的了解有限,我想知道是否有什么东西"引擎盖下#34;这可以实现这个目标。
我要求的理由
我知道这有点"在那里" - 但是已经阅读了一些关于brain cells/neurons,以及通过电荷的神经元可以通过其轴突发送电力/信息的事实对于n个接收器,我可以模仿这个,以便在硬件级别为n个订户提供o(1)pub,并安排OS等等。
所以我想知道这种情况是在现代硬件/操作系统中以某种形式发生的,特别是如果它可以与自定义回调挂钩。
答案 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上,则取决于计算机的内部设计。