来自维基百科关于投票的文章
计算机科学中的轮询或轮询操作是指客户端程序将外部设备的状态作为同步活动进行主动采样.轮询最常用于输入/输出(I/O),也称为轮询I/O或软件驱动的I/O.
轮询有时与忙等待轮询(忙等待)同义.在这种情况下,当需要I/O操作时,计算机除了检查I/O设备的状态之外什么都不做,直到它准备就绪,此时访问设备.换句话说,计算机等待设备准备就绪.
轮询还指的是重复检查设备是否准备就绪的情况,如果不是,则计算机返回到不同的任务.尽管不像繁忙等待那样浪费CPU周期,但这通常不如轮询,中断驱动I/O的替代方案那样有效.
因此,当一个线程不使用"条件变量"时,它会被称为"轮询"数据更改还是"忙等待"?
是否有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).
我有一个简单的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吗?
device属性位于:/ sys/class/vilhelm/foo/blah.
我加载了一个名为foo的内核模块,它注册了一个设备,并创建了一个类和这个设备属性.
名为bar的用户空间应用程序生成一个调用poll设备属性的线程,检查POLLPRI.
poll返回正数,POLLPRI则返回.fopen和fscan从设备属性文件中读取值.我刚刚继承了一个Android应用程序项目作为(技术)产品经理,它使用5秒计时器来轮询远程URL,以查看应用程序启动的某些工作是否已完成.我最初的反应当然是建议用推/通知机制替换它,最好是Android内置的GCM,所以工作从手机上的应用程序中移除并放在服务器端.
令人惊讶的是,我遇到了开发团队的阻力.一位前产品经理(我的前任)似乎明确要求实施以这种方式运作.不幸的是,他在记录他的决定方面并不是很重要,因此我现在必须试图回顾哪些原因可能导致这一决定证明改变实施的合理性.我提出了以下专业和反对清单:
我正在编写一个函数,如果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) 虽然我理解上述问题的答案在某种程度上取决于您的应用程序的架构,但我主要对非常简单的场景感兴趣.
基本上,如果我的应用程序每隔5秒钟进行一次ping更改,或者每分钟一次,那么为什么要发送的数据保持打开的Web套接字连接最终会超过简单轮询所浪费的数量?
基本上,我感兴趣的是,如果应用程序不一定需要实时更新,而只是定期检查,那么通过使用像Meteor这样的框架可以量化多少效率.
请注意,我的重点是带宽利用率,而不一定是数据库访问时间,因为像Meteor这样的框架具有高度优化的方法,只请求更新数据库.
我正在进行自我学习的POC,我想让我的用户以LIVE模式连接.例如,一个游戏,其中4个用户可以一次玩,这里我需要让这个用户连接到我的游戏.
我不擅长Socket类型的编程,喜欢在服务方式中做到这一点.我知道的是"这样做的最佳方法是什么".根据我最初的Brain Storming,我已经决定使用SilverLight(在浏览器中或浏览器外)作为前端[我没有问题].
我更关注后端.要么我做一个处理程序或制作WCF服务或使用全双工服务并使用池化机制.作为一个随机的想法,我提出了一个Timer类型的逻辑,它将在客户端结束后每10秒钟触发一次并获得状态
现在轮到掷骰子了
家里有很多用户离开(如果他们中的一些人离开了)
什么是游戏中的连接用户状态,例如得分/分数等,并
根据此结果更新游戏视图
请在这里找到最好的答案,这将有助于我学习这一点.
致敬和提前感谢
编辑:
由于我需要更多反馈,因此开始赏金.
FH
我正在寻找在我的网站上实施实时投票系统.该网站提供直播,我希望能够提醒观众在施法者发起的投票中选择答案.我可以理解如何将数据存储在mySQL数据库中,以及如何处理答案.然而:
我最初如何在客户端开始投票并显示它?如果脚本每隔几秒钟在页面上运行,请检查另一页以查看是否有可供用户使用的问题?
是否有任何现有的实时轮询系统示例,例如我正在实施的内容?
我刚看到有些浏览器会阻止HTTP轮询(我想通过限制请求的速率)......
来自https://github.com/sstrigler/JSJaC:
注意:由于大多数现代浏览器的安全限制阻止HTTP轮询再次可用,因此默认情况下此模块已被禁用.如果你想在使用'make polling'中编译它.
这可以解释我的一些JavaScripts的一些不当行为(有时请求不会被发送或重试,即使它们实际上是成功的).但我无法找到有关细节的更多信息..
谢谢你的帮助...
斯特凡
我是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 ×10
ajax ×2
busy-waiting ×2
linux ×2
android ×1
apache-kafka ×1
blocking ×1
c ×1
c# ×1
haskell ×1
html ×1
inotify ×1
limit ×1
linux-kernel ×1
mysql ×1
optimization ×1
performance ×1
rate ×1
silverlight ×1
stdin ×1
wcf ×1
websocket ×1