gpt4 book ai didi

c++ - 信号(): any performance impact?

转载 作者:太空宇宙 更新时间:2023-11-03 10:26:59 25 4
gpt4 key购买 nike

我需要捕获 SIGABRT、SIGSEGV 和 SIGILL,以便在我无法控制的事情失败并且程序需要退出时向用户显示正确的严重错误消息。

但是我的程序做了很多实时计算,所以性能很重要。

signal() ( http://www.cplusplus.com/reference/csignal/signal/ ) 是否会导致任何性能损失(某种持续监控?)或根本不会(仅在异常发生时触发,否则没有性能损失)。

编辑:我的软件在 Windows(7 及更高版本)和 OS X(10.7 及更高版本)上运行。

最佳答案

如果您的时间关键进程捕获信号,则不存在“特殊”时间浪费。实际上,内核为您的进程保存了一个信号和操作表,如果发送信号,它必须遍历该表。但是向进程发送消息或调用处理程序的每种方式都需要时间。消息队列或等待“标志”将产生几乎相同的“浪费”。

但使用信号可能会产生其他应提及的含义。如果信号到达,几乎每个系统调用都可以被中断。调用的返回值为 EINTR。如果您有很多信号传递给您的进程,这可能会大大降低您的应用程序的速度,因为您必须始终检查 EINTR 并再次进入系统调用。而且每个系统调用都有点昂贵。因此,在具有 EINTR 返回值的系统调用上循环很多可能是一个糟糕的设计。

但是对于您的问题,您只查找SIGABRTSIGSEGVSIGILL。这些信号通常仅用于极少数异常(exception)情况。所以不要害怕根据需要使用它们。但避免为自己的 IPC 频繁使用这些信号。这可以做到,但设计非常糟糕。对于用户 IPC,有更好的信号名称和更好的方法。

简而言之:对于仅捕获异常信号,您在这里没有任何时间关键问题。

关于c++ - 信号(): any performance impact?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30566661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com