标签: polling

忙等待和轮询有什么区别?

来自维基百科关于投票的文章

计算机科学中的轮询或轮询操作是指客户端程序将外部设备的状态作为同步活动进行主动采样.轮询最常用于输入/输出(I/O),也称为轮询I/O或软件驱动的I/O.

轮询有时与忙等待轮询(忙等待)同义.在这种情况下,当需要I/O操作时,计算机除了检查I/O设备的状态之外什么都不做,直到它准备就绪,此时访问设备.换句话说,计算机等待设备准备就绪.
轮询还指的是重复检查设备是否准备就绪的情况,如果不是,则计算机返回到不同的任务.尽管不像繁忙等待那样浪费CPU周期,但这通常不如轮询,中断驱动I/O的替代方案那样有效.

因此,当一个线程不使用"条件变量"时,它会被称为"轮询"数据更改还是"忙等待"?

multithreading condition-variable polling busy-waiting

10
推荐指数
2
解决办法
2万
查看次数

Haskell:监控文件而不进行轮询(在linux中使用inotify)

是否有haskell库函数来监视文件而不进行轮询?

通过民意调查我会做这样的事情:

monitor file mtime handler = do
    threadDelay n -- sleep `n` ns
    t <- getModificationTime file
    if t > mtime
        then handler >> monitor file t handler
        else monitor file mtime handler
Run Code Online (Sandbox Code Playgroud)

我想要的是一个阻塞的getModificationTime,它将被系统唤醒.有什么东西可用吗?

如果只有posix系统可用,我会非常高兴,但越便携越好:-)

编辑:我知道 hinotify,但我在Mac上(这就是为什么我提到POSIX).

haskell polling inotify busy-waiting

10
推荐指数
3
解决办法
1828
查看次数

为什么不调用`poll`在sysfs设备属性文件上正确阻塞?

我有一个简单的sysfs设备属性,显示在我的sysfs目录下,并在调用时read返回一个kernelspace变量的值.我想调用poll此属性以允许我的用户空间线程阻塞,直到属性显示的值发生更改.

我的问题是poll似乎没有阻止我的属性 - POLLPRI即使属性显示的值没有改变,它仍然会返回.实际上,我sysfs_notify在内核模块中根本没有调用,但用户空间调用poll仍然没有阻塞.

也许我应该检查比其他东西返回值POLLPRI-但根据文档的Linux内核,sysfs_poll应该返回POLLERR|POLLPRI:

/* ... When the content changes (assuming the
 * manager for the kobject supports notification), poll will
 * return POLLERR|POLLPRI ...
 */
Run Code Online (Sandbox Code Playgroud)

有什么我忘了做的事poll吗?


  1. device属性位于:/ sys/class/vilhelm/foo/blah.

  2. 我加载了一个名为foo的内核模块,它注册了一个设备,并创建了一个类和这个设备属性.

  3. 名为bar的用户空间应用程序生成一个调用poll设备属性的线程,检查POLLPRI.

    • 如果poll返回正数,POLLPRI则返回.
    • 使用fopenfscan从设备属性文件中读取值.
    • 如果值是 …

linux polling blocking linux-device-driver linux-kernel

10
推荐指数
1
解决办法
5545
查看次数

民意调查与推送 - 避免推送通知的任何理由?

我刚刚继承了一个Android应用程序项目作为(技术)产品经理,它使用5秒计时器来轮询远程URL,以查看应用程序启动的某些工作是否已完成.我最初的反应当然是建议用推/通知机制替换它,最好是Android内置的GCM,所以工作从手机上的应用程序中移除并放在服务器端.

令人惊讶的是,我遇到了开发团队的阻力.一位前产品经理(我的前任)似乎明确要求实施以这种方式运作.不幸的是,他在记录他的决定方面并不是很重要,因此我现在必须试图回顾哪些原因可能导致这一决定证明改变实施的合理性.我提出了以下专业和反对清单:

Contra Push/Pro民意调查

  1. -
  2. -
  3. 实现推送通知所需的服务器端工作
  4. -
  5. 无法直接了解推送通知是否已成功传递
  6. 扩展推送通知传递可能很痛苦

Pro Push/Contra民意调查

  1. 工作已从设备中删除
    • 降低带宽使用率
    • 降低电池使用量
    • 更灵敏的应用程序和设备
  2. 服务器负载降低,因为即使没有任何更改,设备也不会每x秒轮询一次(DDOS)
  3. -
  4. 推送比5秒更快(响应更快)(当前计时器)
  5. 推送通知的交付证明通过远程URL的轮询实现是微不足道的(这里有意义)
  6. 扩展推送通知传递是许多开源项目和带有消息队列的简单实现的解决问题

  • 是否还有其他原因可以避免使用推送通知并对此用例使用轮询?
  • 是否还有其他原因可以避免轮询并对此用例使用推送通知?
  • 我忘了还有其他重要的事吗?

android polling push-notification google-cloud-messaging

10
推荐指数
1
解决办法
7818
查看次数

非阻塞获取角色

  • 平台:Linux 3.2.0 x86(Debian 7)
  • 编译:GCC 4.7.2(Debian 4.7.2-5)

我正在编写一个函数,如果stdin中已存在一个字符,则从stdin中读取单个字符.如果stdin为空,则该函数假设不执行任何操作并返回-1.我用Google搜索非阻塞输入并指向poll()select().首先我尝试使用select(),但我无法让它工作,所以我尝试了poll()并得出了相同的结论.我不确定这些函数究竟是做什么的,但是根据我对poll()的文档的理解,如果我这样调用它:

struct pollfd pollfds;
pollfds = STDIN_FILENO;
pollfds.events = POLLIN;
poll(pollfds, 1, 0);
Run Code Online (Sandbox Code Playgroud)

if(pollfds.revents&POLLIN)如果"可以在不阻塞的情况下读取高优先级数据以外的数据",则为真.但是poll()总是在我的测试情况下超时.我如何测试函数可能是问题,但我想要的功能正是我正在测试的.这是当前的功能和测试情况.

#include <poll.h>
#include <stdio.h>
#include <unistd.h>

int ngetc(char *c)
{       
    struct pollfd pollfds;
    pollfds.fd = STDIN_FILENO;
    pollfds.events = POLLIN;

    poll(&pollfds, 1, 0);

    if(pollfds.revents & POLLIN)
    {
            //Bonus points to the persons that can tell me if
            //read() will change the value of '*c' if an error
            //occurs during the read
        read(STDIN_FILENO, c, 1);
            return 0; …
Run Code Online (Sandbox Code Playgroud)

c linux stdin polling

10
推荐指数
1
解决办法
7366
查看次数

Web套接字在哪些方面的效率低于轮询?

虽然我理解上述问题的答案在某种程度上取决于您的应用程序的架构,但我主要对非常简单的场景感兴趣.

基本上,如果我的应用程序每隔5秒钟进行一次ping更改,或者每分钟一次,那么为什么要发送的数据保持打开的Web套接字连接最终会超过简单轮询所浪费的数量?

基本上,我感兴趣的是,如果应用程序不一定需要实时更新,而只是定期检查,那么通过使用像Meteor这样的框架可以量化多少效率.

请注意,我的重点是带宽利用率,而不一定是数据库访问时间,因为像Meteor这样的框架具有高度优化的方法,只请求更新数据库.

optimization performance polling websocket

10
推荐指数
2
解决办法
4027
查看次数

保持用户连接的最佳设计/方式是什么?

我正在进行自我学习的POC,我想让我的用户以LIVE模式连接.例如,一个游戏,其中4个用户可以一次玩,这里我需要让这个用户连接到我的游戏.

我不擅长Socket类型的编程,喜欢在服务方式中做到这一点.我知道的是"这样做的最佳方法是什么".根据我最初的Brain Storming,我已经决定使用SilverLight(在浏览器中或浏览器外)作为前端[我没有问题].

我更关注后端.要么我做一个处理程序或制作WCF服务或使用全双工服务并使用池化机制.作为一个随机的想法,我提出了一个Timer类型的逻辑,它将在客户端结束后每10秒钟触发一次并获得状态

  • 现在轮到掷骰子了

  • 家里有很多用户离开(如果他们中的一些人离开了)

  • 什么是游戏中的连接用户状态,例如得分/分数等,并
    根据此结果更新游戏视图

请在这里找到最好的答案,这将有助于我学习这一点.

致敬和提前感谢

编辑:

由于我需要更多反馈,因此开始赏金.

FH

c# silverlight wcf design-patterns polling

9
推荐指数
1
解决办法
484
查看次数

实施实时投票系统

我正在寻找在我的网站上实施实时投票系统.该网站提供直播,我希望能够提醒观众在施法者发起的投票中选择答案.我可以理解如何将数据存储在mySQL数据库中,以及如何处理答案.然而:

我最初如何在客户端开始投票并显示它?如果脚本每隔几秒钟在页面上运行,请检查另一页以查看是否有可供用户使用的问题?

是否有任何现有的实时轮询系统示例,例如我正在实施的内容?

html mysql ajax design-patterns polling

9
推荐指数
1
解决办法
350
查看次数

浏览器会限制AJAX轮询率吗?限制是多少?

我刚看到有些浏览器会阻止HTTP轮询(我想通过限制请求的速率)......

来自https://github.com/sstrigler/JSJaC:

注意:由于大多数现代浏览器的安全限制阻止HTTP轮询再次可用,因此默认情况下此模块已被禁用.如果你想在使用'make polling'中编译它.

这可以解释我的一些JavaScripts的一些不当行为(有时请求不会被发送或重试,即使它们实际上是成功的).但我无法找到有关细节的更多信息..

问题

  • 如果它是"每x秒最大请求数n",x和n的通常/默认设置是什么?
  • 这有什么好的资源吗?
  • 有没有办法检测请求是否因为速率限制而被"延迟"或"拒绝"?

谢谢你的帮助...

斯特凡

ajax xmlhttprequest limit polling rate

9
推荐指数
2
解决办法
2774
查看次数

Kafka Consumer的poll()方法被阻止

我是Kafka 0.9的新手并测试了一些功能,我在Java实现的Consumer(KafkaConsumer)中发现了一个奇怪的行为.

Kafka经纪人位于Ambari外部机器中.

即使你我可以实现一个Producer并开始向外部代理发送消息,我也不知道为什么当消费者试图读取事件(民意调查)时,它会被卡住.

我知道生产者工作得很好,因为我可以通过控制台消费者(在ambari本地工作)消费消息.但是当我执行Java Consumer时,什么都没发生,只是卡住了.调试代码我可以看到它在该poll()行被阻止:

    ConsumerRecords<String, String> records = consumer.poll(100);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,超时没有任何作用.如果你输入0,100或1000毫秒无关紧要,消费者在这一行被阻止并且不会超时也不会抛出异常.

我尝试了所有类型的替代属性,例如advertised.host.name,advertised.listener,...等等,运气不好.

任何帮助将受到高度赞赏.提前致谢!

polling apache-kafka kafka-consumer-api kafka-producer-api

9
推荐指数
1
解决办法
5069
查看次数