信号(signal)和异常(exception)存在哪些异同?
作者:匿名用户
链接:https://www.zhihu.com/question/20175801/answer/14225549
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
链接:https://www.zhihu.com/question/20175801/answer/14225549
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
既然提问者已经补充了一些信息,那么我的定义和理解是以下这些:
那么两者的区别已经很明显了:
除非环境明确要求,一般的程序流程控制只涉及后者;如果环境支持,可能会将 OS 发出的信号包装成对应的异常交给应用处理。
- 信号 / signal:软件中断,特指由操作系统发出给应用的异步提示机制,如 Unix signal 。除零错误等 CPU 信号最终仍然被表现为 SIGFPE 信号,否则不在此讨论(如 IRQ 中断等)
- 异常:按照提问者的补充,为编程语言或环境提供的、同步的错误提示方法,如 C++ / Java 中 throw 的、Python 中 raise 出的对象
那么两者的区别已经很明显了:
- 信号由操作系统发出,更为底层,与程序的执行是异步的,由特殊的处理函数进行异步处理(signal / signaction),与程序语言之间几乎没有集成,处理难度更大。
- (编程语言)异常则由程序语言和运行时提供,是一种可控的、同步激发处理、被语言和运行时支持的、可进行结构化处理的流程控制机制(与 return 和 if else for while 等没有本质区别)。
除非环境明确要求,一般的程序流程控制只涉及后者;如果环境支持,可能会将 OS 发出的信号包装成对应的异常交给应用处理。
https://www.zhihu.com/question/20175801
我思故我在