免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 9363 | 回复: 21
打印 上一主题 下一主题

linux线程通信怎样实现微妙级响应 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-10 17:21 |只看该作者 |倒序浏览
本帖最后由 tpj10 于 2011-12-10 17:23 编辑

一个线程产生数据,放到一个公用的buffer里
另外一个线程处理数据,处理的速度很比产生数据的速度快得多
要求一旦有数据产生,必须在几个微妙之内被处理,应该怎么做?

我现在是让处理数据的线程while死循环判断一个volatile的变量来确定是否有数据等待处理,有则处理,没有则继续循环判断
但是这样会导致CPU无谓的损耗,请教大家有没有好一点的办法?

PS: 多核环境,我尝试过用mutex,但是耗时太多

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2011-12-10 17:26 |只看该作者
放弃吧

论坛徽章:
0
3 [报告]
发表于 2011-12-10 20:30 |只看该作者
回复 1# tpj10


    条件变量的典型应用场景嘛。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2011-12-10 20:34 |只看该作者
既然“处理的速度很比产生数据的速度快得多”,那就产生后直接处理,不要再搞个处理线程了。

上述线程可以考虑用多个

论坛徽章:
0
5 [报告]
发表于 2011-12-10 21:01 |只看该作者
四楼正解,线程不是越多越好。

论坛徽章:
0
6 [报告]
发表于 2011-12-11 16:18 |只看该作者
既然瓶颈在生产数据那里,那线程切割点就不应该是在消费和生产之间。不知道是不是这样理解

论坛徽章:
0
7 [报告]
发表于 2011-12-12 09:00 |只看该作者
可以假设下,如果 --

1. CPU跑1G
2. 线程切换的粒度,1us切换一次
3. 每次切换需要20 CPU cycles

这时候,系统最多能切换50个线程,
你还不能做其他事情。

所以,反证结果就是,线程切换的粒度,将远远大于us级别。
1 ms, 10ms  比较靠谱。

楼主还是死心吧。

论坛徽章:
0
8 [报告]
发表于 2011-12-12 09:20 |只看该作者
本帖最后由 tpj10 于 2011-12-12 09:21 编辑

因为的处理线程除了需要处理生产数据所产生的线程以外,还有一些自己的东西需要处理,比如定时等,
整个系统要求非常高的实时性,延迟和吞吐量都要求非常高
条件变量也用了信号量和锁什么的, 我尝试过用互斥锁,平均延时增加了50us,无法接受。

系统是在多核环境下运行,每个线程可以运行在不同的CPU上。
我现在是用while(1)循环处理的,但是CPU占用太高了。

论坛徽章:
0
9 [报告]
发表于 2011-12-12 09:37 |只看该作者
LZ用while(1)这种方式可以达到几us级的精度吗? 据我所知线程切换所需要的时间都达不到几us级别

论坛徽章:
0
10 [报告]
发表于 2011-12-12 09:47 |只看该作者
本帖最后由 tpj10 于 2011-12-12 09:48 编辑

回复 9# morris2600


    环境是多核的
我用while(1)的时候,每个线程都在独立运行,通过两个volatile的变量用kfifo的方式进行处理。
是没有线程切换的消耗的。 实际运行中,最快的时候,延迟不到1us (gettimeofday没有区别)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP