理论问题:让我们说我打开Skype,我的朋友给我打电话。 Skype如何知道有人打电话给我?它是否每秒检查一次呼叫(信号)?
Skype:有人打电话吗?
服务器:否。
Skype:有人打电话吗?
服务器:否。
Skype:有人打电话吗?
服务器:是的。
Skype:好吧,请联系我们。
当然必须有更好的方法。
答案 0 :(得分:1)
我不知道Skype是如何实施的。希望这不是问题的意图。以下是对此如何工作的超级高级描述。
它可能有用的一种方式是:
这可能是也可能不是对您特定案例中发生的事情的真实描述。另一种可能性是:
每种方法的图片:
SKYPE __________________ ????????
(local server) (remote client)
SKYPE _________ SERVER ________ ???????
(local client) (remote server) (remote client)
在这两种情况下,如果所涉及的操作系统支持多道程序设计(多个进程重叠执行,不一定真正并行执行),则不需要轮询,在这种情况下,这些进程可能会阻塞I / O,直到操作系统发出信号为止。
但是,从根本上说,对I / O进行阻塞的多道程序设计非常类似于轮询,因为进程调度程序在每次决定哪个进程获得下一个时间量时都会进行轮询。