Контекст потока и Контекст синхронизации - PullRequest
0 голосов
/ 24 октября 2018

Я вижу использование терминов Thread Context и Synchronization Context в документах, касающихся потоков.Они относятся к одному и тому же?Это определение для контекста потока от Microsoft:

Контекст потока включает в себя всю информацию, необходимую потоку для плавного возобновления выполнения, включая набор регистров и стек процессора потока, в адресном пространствехост-процесс потока.

Насколько я понимаю, потоки в пуле потоков имеют один и тот же контекст синхронизации.Означает ли это, что они имеют одинаковый контекст потока?

1 Ответ

0 голосов
/ 25 октября 2018

Контекст синхронизации и контекст потока - это 2 очень разные вещи.Контекст синхронизации - это метод, который может поместить единицу работы в контекст (в основном, в другой поток). Здесь - это цитата.

Одним из аспектов SynchronizationContext является то, что он предоставляет способ поставить единицу работы в контекст.Обратите внимание, что эта единица работы ставится в очередь, а не в конкретный поток.Это различие важно, потому что многие реализации SynchronizationContext не основаны на одном конкретном потоке.

Типичным примером, где полезен контекст синхронизации, являются приложения с графическим интерфейсом, такие как WinForms или WPF.В WinForms и WPF только один поток пользовательского интерфейса может обновлять элементы пользовательского интерфейса (текстовые поля, флажки и т. Д.).Если вы попытаетесь изменить содержимое текстового поля из другого потока, не относящегося к пользовательскому интерфейсу, это изменение не произойдет, или может возникнуть исключение (в зависимости от инфраструктуры пользовательского интерфейса).Таким образом, в таком приложении рабочие потоки не-пользовательского интерфейса должны планировать все изменения элементов пользовательского интерфейса в потоке пользовательского интерфейса.И это то, что обеспечивает контекст синхронизации.Это позволяет вам разместить единицу работы (выполнение какого-либо метода) в другом контексте - в данном случае в потоке пользовательского интерфейса.

С другой стороны, контекст потока - это структура, которая содержит всю необходимую информацию.выполнить код потока операционной системой.Если ОС необходимо изменить выполнение из одного потока в другой, она выполняет то, что называется переключением контекста.При переключении контекста поток, который в данный момент выполняется на ЦП, замораживается ОС, а текущее состояние всех регистров ЦП сохраняется в структуре контекста потока замороженного потока. Здесь - фактическая структура контекста потока в ОС Windows и здесь в Windows x64.Когда содержимое всех регистров ЦП перемещается в контекст потока замороженного потока, ОС находит другой (самый предыдущий) поток, который должен выполнить свой код, и перемещает содержимое своей структуры контекста потока в регистры ЦП.После этого переключение контекста заканчивается, и ЦП может выполнять код самого предыдущего потока, пока не произойдет другое переключение контекста.

Таким образом, контекст синхронизации и контекст потока - это две очень разные концепции.Контекст потока - это структура низкого уровня, которая позволяет ОС переключаться между потоками, в то время как контекст синхронизации - это механизм, упрощающий отправку рабочих элементов в различные контексты (в основном в разные потоки).

...