signal():任何性能影响
signal() : any performance impact?
当我无法控制的事情发生故障,程序需要退出时,我需要捕获SIGABRT, SIGSEGV and SIGILL
,向用户显示一条正确的严重错误消息。
然而,我的程序做了很多实时计算,所以性能很重要。
signal()
(http://www.cplusplus.com/reference/csignal/signal/(导致任何performance loss
(某种持续监视?(或根本不(仅在发生异常时触发,否则不会损失性能(。
编辑:我的软件运行在Windows(7及更高版本(和OS X(10.7及更高级别(上。
如果您的时间关键型进程捕捉到信号,就不会有"特殊"的时间浪费。事实上,内核为您的进程保存了一个信号和操作表,如果发送了信号,它必须遍历该表。但是,向进程发送消息或调用处理程序的每一种方式都需要时间。消息队列或等待"标志"将具有几乎相同的"浪费"。
但是,使用信号可能有其他需要提及的含义。如果信号到达,几乎每个系统调用都可能被中断。调用的返回值为EINTR
。如果有许多信号传递给进程,这可能会大大降低应用程序的速度,因为在系统调用中必须始终检查EINTR
。而且每个系统调用都有点昂贵。因此,在带有EINTR
返回值的系统调用上循环很多可能是一种糟糕的设计。
但对于您的问题,您只需要查找SIGABRT
、SIGSEGV
和SIGILL
。这些信号通常只用于很少出现的例外情况。所以,不要害怕根据需要使用它们。但避免经常将这些信号用于自己的IPC。这是可以做到的,但设计非常糟糕。对于用户IPC,有更好的信号名称和更好的方法。
简而言之:只捕获异常信号,这里没有任何时间关键问题。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在容量内调整矢量大小时的性能影响
- 未达到的情况会影响开关外壳性能
- 数组中的不同浮点值会影响性能 10 倍 - 为什么?
- 为 lambda 分配名称会影响性能吗?
- 通过默认复制构造函数比较 C++ 字符串是否会影响性能,原因为何?
- 每个帧的参考中都有多少性能影响
- C++:if 内部循环的性能影响
- C :对输入验证函数进行编程的性能影响可以对其进行编程,而每次都可以将其编程
- GSL 的预期 (cond) 对运行时施加的性能影响是什么?
- VS2005调试模式和发布模式之间存在巨大的性能影响
- 如何分析指针锯齿的性能影响
- 指针和性能影响
- notify_one性能影响
- 可变长度阵列性能影响 (C/C++)
- 包含每个标头是否有任何性能影响
- 在'for-loop'中使用'break'的性能影响
- 当RVO显示最大的性能影响时
- signal():任何性能影响
- 解引用字符串迭代器和性能影响