Поясните что такое контекст исполнения?

Рейтинг: 1Ответов: 1Опубликовано: 25.05.2023

Читаю Рихтера и застрял на 27 главе в разделе про контексты исполнения. Не могу вникнуть и понять, что это такое.

Из прочитанного и нагугленного для себя выделил следующие:

У каждого потока есть собственный контекст исполнения (Execution context). Контекст исполнения – это передача окружающих данных от потока к потоку.

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

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

Я вообще правильно понимаю смысл? Ничего ли я тут не исковеркал и не наврал ли))

UPD

Полезные статьи: https://devblogs.microsoft.com/dotnet/how-async-await-really-works/

Та же статья, но только на русском https://habr.com/ru/articles/732738/

Ответы

▲ 2

В целом правильно. Вот статья 2012 года этого же автора (Stephen Toub) про Контекст выполнения и Контекст синхронизации: https://devblogs.microsoft.com/pfxteam/executioncontext-vs-synchronizationcontext/
Из статьи :

ExecutionContext — это «окружающая» информация, то есть он хранит данные, относящиеся к текущей среде или «контексту», в котором вы работаете. Во многих системах такая внешняя информация хранится в локальном хранилище потока (TLS), например в поле ThreadStatic или в ThreadLocal<T>.

Так же :

ExecutionContext является контейнером для других контекстов (SecurityContext, SynchronizationContext). Некоторые из этих других контекстов являются вспомогательными, а некоторые жизненно важны для модели выполнения .NET.

ExecutionContext представляет собой просто хранилище состояний, которое можно использовать для захвата всего состояния из одного потока, а затем восстановления его в другом потоке, пока продолжается логическое перетекание управления (flow of control).

Резюмируя, ExecutionContext - это объект, который представляет собой контейнер для хранения информации потока выполнения.

P.S. В статье есть употребления словосочетания "flow of control" (на Вики правильный перевод термина - "порядок выполнения"), которое браузер переводит как "поток управления", что может ввести в заблуждение (т.к. это не thread). Поэтому я часто переключался между оригиналом и переводом, чтобы правильно понять смысл.