免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: liklstar
打印 上一主题 下一主题

[系统] “轮询”程序如何编写? [复制链接]

论坛徽章:
6
季节之章:冬
日期:2015-01-20 17:18:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2015-12-20 06:20:00程序设计版块每日发帖之星
日期:2016-06-09 06:20:00每日论坛发贴之星
日期:2016-06-09 06:20:002016科比退役纪念章
日期:2017-01-12 14:08:57
21 [报告]
发表于 2014-05-08 17:39 |只看该作者
本帖最后由 liklstar 于 2014-05-08 18:06 编辑
timespace 发表于 2014-05-08 17:36
问下,如果不用系统调用,怎么暂停进程?


是啊,你说得是!我也在想:要使进程暂停,或说暂时放弃CPU,恐怕必须使用系统调用?!
保持数据一致,在这里不是通过信号量,而是其它方法。何况,这里没有“公共数据”或说“共享数据”,因此,我觉得恐怕可以不使用信号量同步进程对变量的操作。比方说数据发送:发送进程构造描述子后放入发送队列,通知网卡有数据要发送,而后返回。网卡根据描述子里的信息异步发送数据,完毕后,通过设置刚刚使用过的描述子为“发送完毕”状态来通知进程数据发送完毕。用户进程定时轮询发送队列,查看任务是否完成。然后采取相应动作。所以,这里的网络I/O和进程操作描述符的动作是异步的,不需要同步。也就不需要使用信号量。

噢,不!如果深入到很细节里去,那是有可能发生变量的互斥操作的!比如:队列的头、尾指针的修改和比较就需要互斥操作。不过,这样的互斥和同步到哪里都是必须的,省不了的。谢谢你的提醒!很高兴与你讨论问题。

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
22 [报告]
发表于 2014-05-08 18:10 |只看该作者
回复 21# liklstar
还有就是放弃了CPU,怎么重新调度?死结一个,系统调用是免不了的。。。除非进程永不放弃CPU,真正的busy-wait,也遇到过这种应用,为进程设置cpu affinity,好处就是延迟低,那个core的基本永远是100%。


   

论坛徽章:
6
季节之章:冬
日期:2015-01-20 17:18:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2015-12-20 06:20:00程序设计版块每日发帖之星
日期:2016-06-09 06:20:00每日论坛发贴之星
日期:2016-06-09 06:20:002016科比退役纪念章
日期:2017-01-12 14:08:57
23 [报告]
发表于 2014-05-08 18:21 |只看该作者
timespace 发表于 2014-05-08 18:10
回复 21# liklstar
还有就是放弃了CPU,怎么重新调度?死结一个,系统调用是免不了的。。。除非进程永不放 ...


是啊!这也正是我在前面问过的:自动放弃CPU的进程是放在“就绪队列”里,还是“阻塞队列”里?如果放在“就绪队列”里,那很好办,不用管它,一会儿就又运行了。实际上,处于“就绪队列”里的进程,严格来说,我觉得应该就是处于“运行态”的。如果放入“阻塞队列”,那么肯定是放在等待“睡眠时间到”事件的队列里。当“时间到”条件发生时,进程就又运行了。

论坛徽章:
6
季节之章:冬
日期:2015-01-20 17:18:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2015-12-20 06:20:00程序设计版块每日发帖之星
日期:2016-06-09 06:20:00每日论坛发贴之星
日期:2016-06-09 06:20:002016科比退役纪念章
日期:2017-01-12 14:08:57
24 [报告]
发表于 2014-05-08 19:50 |只看该作者
timespace 发表于 2014-05-08 18:10
回复 21# liklstar
还有就是放弃了CPU,怎么重新调度?死结一个,系统调用是免不了的。。。除非进程永不放 ...


如果系统调用免不了,那我是不是可以用两个线程完成轮询和正常操作?在一个进程中开两个线程:线程一负责轮询发送和接收队列,发现有完成的操作就响应并移除描述符,线程二负责构建描述符、将描述符添加到队列以及通知网卡等正常工作?

这样做可以吗?能实现吗?

论坛徽章:
0
25 [报告]
发表于 2014-05-20 14:06 |只看该作者
你要是不想采用系统调用来实现,你自己写一个循环,几百万次,几千万次,什么都不干,就循环。。。。

论坛徽章:
0
26 [报告]
发表于 2014-05-20 22:36 |只看该作者
使用select模型
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP