关于异步:APC执行上下文有问题吗?

APC execution context question?

当发生异步过程调用(APC)时,它将"异步"执行到线程的当前上下文。根据此MSDN信息:APC

现在我的问题是,"与当前线程的上下文异步执行"到底是什么意思?

是在线程已经在执行之外执行,还是在中断该线程以首先执行APC然后继续其工作?

因为据我所知,处理器无法"真正"同时执行两项操作。除非我完全误解了这里的"异步"概念。

任何人都可以提供解释或解释的链接吗?


线程必须处于可警报状态才能运行用户模式APC。

将用户模式APC排队时,除非它处于警报状态,否则不会定向到它所在的线程调用APC函数。

线程在调用SleepEx, SignalObjectAndWait, MsgWaitForMultipleObjectsEx, WaitForMultipleObjectsEx, or WaitForSingleObjectEx函数时进入可警告状态。如果在APC排队之前满足了等待条件,则线程不再处于可警告的等待状态,因此将不会执行APC功能。但是,APC仍在排队,因此当线程调用另一个可警告的等待函数时,将执行APC函数。

与当前线程的上下文异步执行
当线程调用Alertable Wait函数并切换到Alertable状态时,将执行APC函数。

我建议您阅读

1
2
Windows via C/C++, Fifth Edition
Chapter 10 - Synchronous and Asynchronous Device I/O


这是一个更为笼统的问题。如果计算机无法一次完成很多事情,您如何看待计算机执行多任务处理?的确,在任何给定的瞬间,它可能只会做一件事,但是每个任务(无论是运行Web浏览器还是执行APC线程)都是按时间划分的,并在处理器上同时执行。尽管它们实际上是在处理器上交错的,但它们似乎是在同时执行。

当然,如果您有多个内核,就像现在大多数机器一样,它们实际上可以一次执行许多事情。