当发生异步过程调用(APC)时,它将“异步”执行到线程的当前上下文。根据此MSDN信息:APC
现在我的问题是,它究竟是什么意思'与当前线程的上下文异步执行'?除了线程已在执行之外,它是执行还是线程被中断以首先执行APC然后继续其工作?
据我所知,处理器不能“真正”同时做两件事。除非我在这里完全误解了“异步”概念。
有人可以提供解释或解释链接吗?
答案 0 :(得分:2)
线程必须处于警报状态才能运行用户模式APC。
当用户模式APC排队时,除非它处于警报状态,否则不会将其排队的线程调用APC功能。
线程在调用SleepEx, SignalObjectAndWait, MsgWaitForMultipleObjectsEx, WaitForMultipleObjectsEx, or WaitForSingleObjectEx
函数时进入可警告状态。如果在APC排队之前满足等待,则线程不再处于可警告的等待状态,因此不会执行APC功能。但是,APC仍然排队,因此当线程调用另一个可警告的等待函数时,将执行APC函数。
异步执行到当前线程的上下文意味着 当线程调用可警告的等待功能并切换到可警告状态时,将执行APC功能。
我建议你阅读
Windows via C/C++, Fifth Edition
Chapter 10 - Synchronous and Asynchronous Device I/O
答案 1 :(得分:0)
这是一个更普遍的问题。如果计算机不能同时执行多项操作,您认为计算机如何处理多任务处理?确实,在任何给定的时刻,它可能只做一件事,但每个任务(无论是运行Web浏览器还是执行您的APC线程)都是时间分片并在处理器上同时执行。它们似乎是在同一时间执行,尽管它们实际上是在处理器上交错的。
当然,如果你有多个内核,就像现在大多数机器一样,它们真的可以同时执行很多东西。