代码之家  ›  专栏  ›  技术社区  ›  John L.

线程上下文和同步上下文

  •  0
  • John L.  · 技术社区  · 8 年前

    Thread Context 和 Synchronization Context 这是Microsoft对线程上下文的定义:

    线程上下文包含线程需要的所有信息 寄存器和堆栈,在线程主机的地址空间中

    1 回复  |  直到 8 年前
        1
  •  3
  •   Timmy_A    8 年前

    同步上下文和线程上下文是两个完全不同的东西。同步上下文是一种方法,它可以将一个工作单元排队到一个上下文(主要是一个不同的线程)。 Here 是一个引用。

    SynchronizationContext的一个方面是它提供了一种 将工作单元排队到上下文。请注意,此工作单元是 重要的是,因为SynchronizationContext的许多实现 不是基于单个特定线程。

    同步上下文非常有用的一个典型示例是WinForms或WPF应用程序等GUI应用程序。在WinForms和WPF中,只有一个UI线程可以更新UI元素(文本框、复选框等)。如果尝试从另一个非UI线程更改textbox的内容,则不会发生更改,或者可能引发异常(取决于UI框架)。因此,在这种应用程序中,非UI线程的工作线程需要将UI元素的所有更改调度到UI线程。这就是同步上下文所提供的。它允许您将一个工作单元(某个方法的执行)发布到不同的上下文—在本例中是UI线程。

    Here 是Windows操作系统和 here 在x64 Windows上。当所有CPU寄存器的内容被移动到冻结线程的线程上下文时,OS会找到另一个(最早的)必须运行其代码的线程,并将其线程上下文结构的内容移动到CPU寄存器。在此之后,上下文切换结束,CPU可以执行前一个线程的代码,直到发生另一个上下文切换。

    所以同步上下文和线程上下文是两个完全不同的概念。线程上下文是一种底层结构,允许操作系统在线程之间切换,而同步上下文是一种机制,用于简化将工作项发送到不同上下文(主要是不同的线程)的过程。