解决争议的假设性问题。假设我有一台服务器和 1000 个活跃用户。当发生有趣的事情时,服务器将通过推送通知进行响应(这取决于每个用户。)
每个用户都可以订阅其他用户,因此当他们更新某些内容时,所有订阅的用户都会收到推送通知。
推送通知将由用户发送一个非常长的超时消息来实现,然后根据需要坐下来等待,直到服务器回复。服务器只会在发生有趣的事情时回复。
现在让我们假设拥有 1000 个对象并在它们之间触发事件是不可行的。当用户发出请求时,他将获得自己的线程,该线程执行一个循环以检查任何有趣的事情,然后等待直到适当的 WaitHandle 发出信号唤醒它并执行另一个循环。
这里的关键是让每个线程无限循环直到发生某些事情是不可行的,所以我们让它进入睡眠状态并等待信号。
如果只有大约 2-5% 的时间会发生有趣的事情 - 20-50 个活动线程随时醒来执行单个循环。将所有这些休眠线程放在那里会导致任何重大的性能问题。或者换句话说,程序是线性扩展还是指数扩展(在计算方面)?