我问过了不久前“异步”对于中断意味着什么。现在我有同样的问题,但对于运行 shell 命令和取消线程。
来自 Bash 手册
如果命令被控制操作符终止
&
,则 shell 执行该命令异步地在子外壳中。
来自 Abraham Silberschatz 等人的《操作系统概念》,
要取消的线程通常称为目标线程。目标线程的取消可能发生在两种不同的情况下:
异步消除。一个线程立即终止目标线程。
延期取消。目标线程定期检查它是否应该终止,从而使其有机会以有序的方式终止自身。
我想知道在上述两种情况下“异步”意味着什么?这两种情况的含义相同吗?
Google 的定义是否适用于上述两种情况?:
形容词:异步
(两个或多个物体或事件)不同时存在或发生。
计算机、电信
属于或需要某种形式的计算机控制定时协议,其中一个具体的操作收到指示(信号)后开始 前面的操作已经完成。
谷歌的这两个定义看起来
与“异步”运算符的情况相反
&
,与线程的“异步”取消无关?
如果第二个定义适用于上述两种情况,那么每种情况下的“特定操作”和“前面的操作”分别是什么?
谢谢。
答案1
在所有这些情况下,“异步”的含义都不同。
在 shell 情况下,&
异步运行命令,这意味着命令一启动,shell 就会重新获得控制权,并且命令在后台运行。 shell 将处理下一个命令(如果有),或者将控制权返回给用户或父进程(如果没有)。
在线程情况下,异步取消意味着被取消的线程立即停止,通常以仅从线程外部控制的方式,IE来自取消线程。我对你遇到的定义并不熟悉;我倾向于认为异步取消如中所述pthread_cancel
POSIX函数的定义,IE取消是异步的,因为取消函数立即将控制返回给调用者,并且取消在目标线程中并行进行。
在您使用 Google 找到的第一个定义中,异步指的是通信的本质:异步通信发生在各方无需同时出现时。异步通信的一个例子是电子邮件。
您使用 Google 找到的第二个定义似乎是指异步编程,例如回调驱动的编程。您不是按程序定义操作序列并阻塞操作,而是描述事件以及事件发生时执行的操作序列。您引用的异步定义似乎是指当另一个操作序列完成时执行的操作序列(请参阅说明ListenableFuture
的一个实现)。想象一下您想要从网站检索一些信息并对其进行处理;在典型的程序风格中,您将使用类似的方法curl
来检索网站数据,等待其完成,然后对其进行处理。在异步风格中,您可以描述要对数据执行的操作,然后使用该描述启动检索,一旦数据可用,处理就会发生,同时您可以执行其他操作。这里的“具体操作”是您想要执行的处理,“先前操作”是数据检索。