异步信号是什么意思?

时间:2015-06-03 17:36:05

标签: c asynchronous signals

来自维基百科的两个定义:

  

在计算机科学中,异步I / O或非阻塞I / O是一种形式   允许其他处理继续的输入/输出处理   在传输完成之前。

     

信号是一种有限的进程间通信方式   Unix,类Unix和其他符合POSIX标准的操作系统。一个信号   是发送到进程或特定进程的异步通知   同一进程中的线程,以便通知它一个事件   发生。

我无法理解其含义:

  

信号是发送给流程的异步通知

这是否意味着,就像I / O一样,信号被发送到进程并且发送信号的进程不等待接收信号的进程的返回值,并继续进行?

如果信号是同步的,那么发送过程是否会等待返回值?

3 个答案:

答案 0 :(得分:0)

在我看来,你在维基百科文章中突出显示的陈述过于笼统,无法帮助弄清楚“幕后发生了什么”。例如,关于回调的实现,请看一下Open Group specification的这一部分:

  

指向函数的指针

     

捕捉信号。

     

在传递信号时,接收过程是执行   指定地址的信号捕捉功能。回来后   从信号捕捉功能,接收过程将恢复   在被打断的时刻执行。

答案 1 :(得分:0)

看起来好像可以在

中省略“异步”
  

信号是发送到进程或同一进程中的特定线程的异步通知,以便通知它发生的事件。

信号接收者不知道发送过程是继续还是等待。它对接收器来说也不重要(除非在“协议”中发送器等待或继续,可能规定接收器对响应时间的约束)。

另一种观点可能是:

  • 异步事件可能意味着在接收方处理第一个事件之前,可以从发送方接收更多相同或不同的事件。

  • 同步事件可能意味着在接收方处理完该类型的上一个同步事件之前,不会从发送方收到相同类型的事件。 (虽然可以从发送方接收其他类型的同步或异步事件。)

事件的[a]同步性声明似乎只与接收者对发送者的期望有关,但我怀疑维基百科的定义是指发送者阻止/继续其处理,这不是对接收者来说很重要。

这会如何转化为向同一个接收器发送相同类型的同步事件的多个发送者?

答案 2 :(得分:0)

信号是异步的,因为线程可能会在执行的任何时刻接收信号。这与代码中所有其他内容的同步性形成对比:一个语句跟随另一个语句,在函数调用后您希望有一个值,此指令遵循之前的一个语句,依此类推……您便明白了。信号处理程序可以随时开始执行(通常会中断当前流程的执行,直到完成)。

问题在于该段落没有引用相同的 asynchronous 术语:而是引用了可能在“后台”执行的非阻塞调用,从而允许当前线程执行其他任务等待接收响应时(请注意,这种接收与信号的接收方式异步一样)。