Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous APC执行上下文问题?_Asynchronous_Multithreading - Fatal编程技术网

Asynchronous APC执行上下文问题?

Asynchronous APC执行上下文问题?,asynchronous,multithreading,Asynchronous,Multithreading,当异步过程调用(APC)发生时,它将对线程的当前上下文“异步”执行。根据此MSDN信息: 现在我的问题是,“异步执行到当前线程的上下文”到底是什么意思?它是在线程已经执行的内容之外执行的,还是线程被中断以首先执行APC,然后继续其工作 因为据我所知,处理器不能同时“真正”做两件事。除非我完全误解了这里的“异步”概念 有人能提供解释或解释链接吗?这是一个更一般的问题。如果一台计算机不能同时做很多事情,你认为它如何处理多任务?的确,在任何给定的时刻,它可能只做一件事,但每个任务(无论是运行web浏览

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

现在我的问题是,“异步执行到当前线程的上下文”到底是什么意思?它是在线程已经执行的内容之外执行的,还是线程被中断以首先执行APC,然后继续其工作

因为据我所知,处理器不能同时“真正”做两件事。除非我完全误解了这里的“异步”概念


有人能提供解释或解释链接吗?

这是一个更一般的问题。如果一台计算机不能同时做很多事情,你认为它如何处理多任务?的确,在任何给定的时刻,它可能只做一件事,但每个任务(无论是运行web浏览器还是执行APC线程)都是时间片,并在处理器上并发执行。它们看起来是同时执行的,尽管它们实际上是在处理器上交错的


当然,如果你有多个内核,就像现在大多数机器一样,它们确实可以同时执行很多事情。

这是一个更一般的问题。如果一台计算机不能同时做很多事情,你认为它如何处理多任务?的确,在任何给定的时刻,它可能只做一件事,但每个任务(无论是运行web浏览器还是执行APC线程)都是时间片,并在处理器上并发执行。它们看起来是同时执行的,尽管它们实际上是在处理器上交错的


当然,如果您有多个内核,就像大多数机器现在所做的那样,它们确实可以同时执行许多事情。

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

当用户模式APC排队时,它排队的线程不会被定向调用APC函数,除非它处于可报警状态。

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

异步执行到当前线程的上下文意味着 当线程调用alertable wait函数并切换到alertable状态时,将执行APC函数

我建议你读书

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

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

当用户模式APC排队时,它排队的线程不会被定向调用APC函数,除非它处于可报警状态。

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

异步执行到当前线程的上下文意味着 当线程调用alertable wait函数并切换到alertable状态时,将执行APC函数

我建议你读书

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

好的,那么APC是并发执行的,如果我们说的是单处理器系统,使用时间片机制?好的,那么APC是并发执行的,如果我们说的是单处理器系统,使用时间片机制?