我看到在有关线程的文档中使用了术语Thread Context和Synchronization Context。它们指的是同一件事吗?这是Microsoft对线程上下文的定义:
CPU线程上下文包括线程在线程宿主进程的地址空间中无缝恢复执行所需的所有信息,包括线程的
寄存器集和堆栈。
据我所知,线程池中的线程共享相同的同步上下文。这是否意味着它们具有相同的线程上下文?
发布于 2018-10-25 11:27:38
同步上下文和线程上下文是两个非常不同的东西。同步上下文是一种方法,它可以将一个工作单元排队到一个上下文(主要是不同的线程)。Here是一句名言。
SynchronizationContext的一个方面是,它提供了一种将工作单元排队到上下文的方法。请注意,此工作单元排队到上下文,而不是特定的线程。这种区别很重要,因为SynchronizationContext的许多实现都不是基于单个特定的线程。
同步上下文有用的典型示例是图形用户界面应用程序,如WinForms或WPF应用程序。在WinForms和WPF中,只有一个UI线程可以更新UI元素(文本框、复选框等)。如果您尝试从另一个非UI线程更改textbox的内容,更改不会发生或可能抛出异常(取决于UI框架)。因此,在这样的应用程序中,工作者非UI线程需要将对UI元素的所有更改调度到UI线程。这就是同步上下文所提供的。它允许您将一个工作单元(某些方法的执行)发送到不同的上下文-在本例中是UI线程。
另一方面,线程上下文是包含OS执行线程代码所需的所有信息的结构。如果操作系统需要将执行从一个线程切换到另一个线程,它会执行一种称为上下文切换的东西。在上下文切换中,当前在CPU上运行的线程被OS冻结,并且所有CPU寄存器的当前状态被存储到冻结线程的线程上下文结构中。在Windows上,Here是实际的线程上下文结构;在x64 Windows上,它是here。当所有CPU寄存器的内容被移动到冻结线程的线程上下文时,OS找到必须运行其代码的另一个(最优先的)线程,并将其线程上下文结构的内容移动到CPU寄存器。在此之后,上下文切换结束,CPU可以执行最前一个线程的代码,直到发生另一次上下文切换。
因此,同步上下文和线程上下文是两个截然不同的概念。线程上下文是允许OS在线程之间切换的低级结构,而同步上下文是一种简化向不同上下文(主要是不同线程)发送工作项目的机制。
https://stackoverflow.com/questions/52976519
复制相似问题