如何在不轮询的情况下获取数据?

How get a data without polling?

这更像是一个理论问题。

好吧,假设我有两个同时工作的程序,主程序只有在从辅助程序收到标记为 true 的标志时才做某事。所以,这个主程序有一个功能,会不断向辅助程序询问标志的值,当它为真时,它会做一些事情。

我在大学学到的是 轮询 是最简单的方法。但是当我开始作为一名开发人员工作时,同事告诉我,这种方法会产生一些开销,或者是浪费计算,因为它每隔一定时间就询问一个值。

我试图想出一些以不同方式执行此操作的想法,在 Internet 上搜索了类似的内容,但没有找到有关如何执行此操作的有用方法。

我读到有关中断和被动方式的信息,这些中断和被动方式可能导致主程序仅在辅助程序通知时才获取该数据。但是这是怎么发生的呢?主程序需要一个函数来检查中断对吗?那么它不会像以前一样结束吗?

我可以做些什么不同的事情?

如果您翻转请求的顺序,您最终会得到更类似于标准网络的东西 API。您的主程序(留在您的示例中)将是一个监听请求的服务器。辅助程序将是客户端访问服务器上的端点以触发事件。

每种语言都有很多方法可以实现这一点,而且它不必与 tcp/ip 请求相关联。

我会尽快为您添加几个链接。

好吧,在大多数语言中,您不会实现这么低的级别。但是从理论上讲,有不同的等待策略,你说的是主动等待。这样做你可以轻松吃掉你所有的内存。

大多数语言都实现了库,允许您将进程作为服务启动,该进程处于被动等待状态,并在请求到来时触发。

防止轮询的典型方法是使用 Publish/Subscribe 模式。

您的客户端程序将订阅到服务器程序,当事件发生时,服务器程序将发布给它的所有订阅者他们可以根据需要处理。

没有魔法... 没有程序会猜测它何时有新信息要读取,您可以做的是在两种方法之间做出决定,

A -> asks -> B  
A <- is informed <- B

什么时候使用每个?这取决于许多其他因素,例如:

1- 从数据生成的那一刻起,您需要以多快的速度交付数据?越远越好?或持有一段时间并累积
2- 数据生成的速度有多快?
3- 有多少同时客户端在同一台服务器上请求数据
4- 你处理什么类型的数据?执着的?快速变化?

如果你正在构建类似股票分析器的东西,你需要每秒询问股票价格(并且它也会每秒变化)你提到的方法可能是最好的

如果您正在编写一个基于聊天的应用程序,例如 whatsapp,您需要在其中检查是否有一些新消息发送给客户端并且大多数时候不会...发布订阅可能是最好的

但所有这些都是对高影响架构决策的非常肤浅的了解,不可能仅通过查看一个因素来获得最佳效果

我想表达的是

coworkers told me that this method generate some overhead or it's waste of computation

这不是一个正确的说法,它可能在某些特定场景下,但开销将始终存在于分布式系统中