免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
11 [报告]
发表于 2014-05-08 16:16 |只看该作者
回复 9# liklstar
那选择轮询这个前提就是错误的。系统编程有很多方法可以避免busy-wait,基于fd的IPC可以用select/poll/epoll,其他的realtime signal/semaphore/mutex/condition variable等等,有数据交换,必有同步问题,也必有系统调用。在程序架构都出来之前,就谈系统调用的性能问题,完全是杞人忧天。


   

论坛徽章:
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
12 [报告]
发表于 2014-05-08 16:19 |只看该作者
本帖最后由 liklstar 于 2014-05-08 16:46 编辑
timespace 发表于 2014-05-08 10:24
回复 3# liklstar
用户空间“定期”和“轮询”为什么会很难?sleep/nanosleep/select等等,轮询不就行了么 ...


你说的sleep/nanosleep/select系统调用是将被剥夺CPU的进程放入“就绪队列”还是“阻塞队列”啊?如果是“阻塞队列”,那什么事件才能Wakeup该进程呢?这个“睡眠时间到”事件是如何产生的?

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
13 [报告]
发表于 2014-05-08 16:29 |只看该作者
回复 12# liklstar
有用过任何一种用户空间使用的IPC吗?确保我们在一个频道上,看你不是谈x86时间片就是虚拟-物理地址,好像是在做实时应用或内核hack一样,这不是我的本意,如果我们谈的根本不是一码事,差不多打住吧,以免误导大众。建议到内核区或C/C++区咨询,这两个版有精通底层的高人出没。


   

论坛徽章:
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
14 [报告]
发表于 2014-05-08 16:38 |只看该作者
timespace 发表于 2014-05-08 16:16
回复 9# liklstar
那选择轮询这个前提就是错误的。系统编程有很多方法可以避免busy-wait,基于fd的IPC可以 ...


这样吧,咱们再简化一下需求。是这样:
一个用户进程和它的一个私有数据接收队列。队列中存放标识接收任务的描述子。描述子中存放用于接收数据的缓冲区物理地址。这个描述子应在数据到来之前由该进程放入它的接收描述子队列。当数据到来后,由网卡绕过TCP/IP和内核,按照描述子中记载的物理地址将数据存入接收缓冲区。接收完成后标记描述子状态为“完成接收”。这些操作,出网卡外,均在用户态实现。

现在,我需要这个进程定期轮询其接收描述子队列,查看是否有已完成的接收任务?如果有,则相应之并从接收队列中移除描述子。

我觉得这个要求很正常。我不知道这算不算程序架构,但我觉得应该不难实现?难倒要求不使用系统调用就很难办到吗?

论坛徽章:
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
15 [报告]
发表于 2014-05-08 16:49 |只看该作者
timespace 发表于 2014-05-08 16:29
回复 12# liklstar
有用过任何一种用户空间使用的IPC吗?确保我们在一个频道上,看你不是谈x86时间片就是 ...


你不用管那些名词,你的意思是不是说:要想实现“定时轮询”就必须使用系统调用?没有别的方法?

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
16 [报告]
发表于 2014-05-08 16:53 |只看该作者
回复 15# liklstar
一提“定时”就想到了系统调用,也许有更牛X的的办法,只不过我不知道


   

论坛徽章:
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
17 [报告]
发表于 2014-05-08 17:04 |只看该作者
timespace 发表于 2014-05-08 16:53
回复 15# liklstar
一提“定时”就想到了系统调用,也许有更牛X的的办法,只不过我不知道


哦,是这样!

论坛徽章:
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
18 [报告]
发表于 2014-05-08 17:12 |只看该作者
timespace 发表于 2014-05-08 16:53
回复 15# liklstar
一提“定时”就想到了系统调用,也许有更牛X的的办法,只不过我不知道


什么叫“轮询”啊?是不是“轮询”就意味着一定要“定时”啊?

论坛徽章:
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
19 [报告]
发表于 2014-05-08 17:19 |只看该作者
timespace 发表于 2014-05-08 16:16
回复 9# liklstar
那选择轮询这个前提就是错误的。系统编程有很多方法可以避免busy-wait,基于fd的IPC可以 ...


你一说“忙等”,我就想起“自旋锁”。你说的“忙等”是指什么呢?我这里要求进程定时查看是否有任务完成。如果没有,进程就暂停(是不是主动放弃CPU?)。如果有,就进行处理。

至于这些用于进程同步的信号量,我这里似乎暂时不用?相反,我的网络I/O与进程操作是完全异步的。

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
20 [报告]
发表于 2014-05-08 17:36 |只看该作者
如果没有,进程就暂停(是不是主动放弃CPU?)

问下,如果不用系统调用,怎么暂停进程?

相反,我的网络I/O与进程操作是完全异步的

网络I/O和进程操作是如何安全修改队列的?毕竟是异步的,总是要有某种机制保证数据一致性吧



您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP