Поясните что такое контекст исполнения?
Читаю Рихтера и застрял на 27 главе в разделе про контексты исполнения. Не могу вникнуть и понять, что это такое.
Из прочитанного и нагугленного для себя выделил следующие:
У каждого потока есть собственный контекст исполнения (Execution context). Контекст исполнения – это передача окружающих данных от потока к потоку.
Если мы говорим о платформе .net core, то окружающими данными выступают контекст синхронизации и некоторые региональные параметры. Так как эти параметры не должны являться глобальными, то контексту исполнения нужно их передавать от одного потока к другому. Данные операции копирования данных могут гарантировать нам одинаковые контексты синхронизации и региональные параметры, а это очень важно, так как эти параметры влияют на некоторые операции. Если бы эти данные были глобальными, то это приводило бы к тому, что каждый потоки соперничали за эти ресурсы и какой-то поток мог их перезаписать и данные окружения были бы не валидные.
По умолчанию CLR автоматически копирует контекст исполнения с самого первого потока во все вспомогательные потоки. Это безусловно гарантирует безопасность, но это влияет на производительность так как контекст исполнения содержит много информации и эту информацию нужно перекидывать от потока к потоку.
Я вообще правильно понимаю смысл? Ничего ли я тут не исковеркал и не наврал ли))
UPD
Полезные статьи: https://devblogs.microsoft.com/dotnet/how-async-await-really-works/
Та же статья, но только на русском https://habr.com/ru/articles/732738/
Ответы (1 шт):
В целом правильно. Вот статья 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). Поэтому я часто переключался между оригиналом и переводом, чтобы правильно понять смысл.