免费注册 查看新帖 |

Chinaunix

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

[通信方式] 应用程序信号太多,会导致什么问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-02-16 17:36 |只看该作者 |倒序浏览
有个服务器的程序,进程之间需要很频繁的互发信号,来完成一些处理,这样会对系统产生怎样的影响?另外一个问题就是,信号处理函数中有很多逻辑,比如需要通过socket发送数据之类的,这样有什么不妥吗?

先谢过大牛了。

论坛徽章:
0
2 [报告]
发表于 2013-02-16 18:36 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2013-02-16 20:56 |只看该作者
回复 2# stephen_du


    嗯。有其他的方案,不过我主要是想搞清楚,这么做会有哪些直接或者明显的影响。

论坛徽章:
0
4 [报告]
发表于 2013-02-18 12:49 |只看该作者
建议看看信号的实现机制,通常处理一个信号是需要反复进出内核的。至于有什么样的影响,甚至量化的数据,就跟你的实际用例和环境紧密相关了,不妨写个验证用例试试先。

论坛徽章:
0
5 [报告]
发表于 2013-02-18 14:40 |只看该作者
我的想法,signal是linux中IPC通信的一种方式,处理的时间一般是中断,异常,系统调用,这样的话就会有一种问题,当一个A Process向B Process发送signal的时候,其实只是在B process的task_struct中进行了标记,而没有立即调用这个signal的handler,B Process调用signal handler的时机是当处理中断,异常,系统调用完成之后,会check signal,可以参考arch/arm/kernel/entry-common.S的func work_pending。

如果你的处理必须是实时的话,那么用signal就不是很好了,signal常用的地方还是处理一下异常情况,并不适用于进程间数据通信

论坛徽章:
0
6 [报告]
发表于 2013-02-19 09:11 |只看该作者
回复 5# cuibixiong_cu


    也不是严格意识上的要求实时,但至少应该比进程在那空转轮询状态好些吧,因为等待实在太耗性能。。。

论坛徽章:
0
7 [报告]
发表于 2013-02-19 11:24 |只看该作者
回复 6# dingyujie


    兄弟,你说的这种情况,应该是“同步“。百度一下吧。

论坛徽章:
0
8 [报告]
发表于 2013-02-19 15:08 |只看该作者
要看怎么实现的,其实要正确的写好信号处理函数不容易,要考虑如下几点:

1,信号处理的方式,是异步处理,还是定向到特定的线程去做同步处理。

2,如果是异步处理,安全性即可重入问题尤其重要,不可重入的函数,甚至errno都会受影响,代码谨慎。

3,使用什么类型的信号,是否可靠是否会排队,决定了你的处理逻辑。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
9 [报告]
发表于 2013-02-19 15:26 |只看该作者
进程间通信方法很多, 简单的内存共享队列, 进程共享互斥锁+条件变量, 信号量, 都能解决空转问题,

论坛徽章:
0
10 [报告]
发表于 2013-02-19 18:21 |只看该作者
回复 9# linux_c_py_php


    嗯,我是想问,如果就是用信号,会导致什么具体的问题和影响?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP