3.1 О многопоточном программировании в C#.

Введение в многопоточность: многопоточность в C# .NET

В данной главе мы рассмотрим вопрос многопоточности и того, как она реализована в среде .NET Framework. Понимание задач и методов многопоточного программирования является очень важной темой, нуждающейся в подробном изучении для создания современных высококачественных и производительных программ.

Одной из очень важных особенностей языка C# является то, что он имеет встроенную поддержку многопоточного программирования.

Особенность многопоточной программы в том, что она может состоять из нескольких частей, каждая из которых выполняет свою часть поставленной задачи. Таким образом, части выполняются параллельно. Такая часть программы называется потоком. Среда .NET Framework, в свою очередь, содержит ряд классов, предназначенный для гибкой реализации многопоточных приложений. Причем, в отличии от других языков программирования, имевших слабые места или подводные камни , встречавшиеся в процессе создания многопоточных приложений, C#, в силу своей встроенной поддержки многопоточности, позволяет полностью ликвидировать эти проблемы, или, в худшем случае, свести их к минимуму.

Многопоточность может быть ориентированная на потоки и процессы. Здесь важно понимать разницу, так как процесс, по сути, является отдельно выполняемой программной. Т.е. здесь многопоточность основана на том, что выполняются две и более программы.

Поток (по-английски - это thread, буквально можно перевести как «нить») – это управляемая единица кода, выполняемая в адресном пространстве породившего его потока. Используя многопоточность, мы можем реализовать нашу программу таким образом, чтобы один поток просчитывал графику в сцене, визуализировал ее и обновлял окно, а другой в это же самое время просчитывал физические законы, которые происходят в сцене. Или представьте другой пример: программа должна заниматься просчетом математических алгоритмов. Вычисление одного уравнения занимает 10-15 секунд. И следовательно, так как программа выполняет строки кода последовательно, до тех пор пока вычисление не будет завершено, окно приложения не будет отвечать на запросы операционной системы, оно, грубо говоря, «зависнет» на 10-15 секунд, пока не закончатся циклы математических вычислений.

Как видно из примера, ни одна современная сложная программа не может обойтись без многопоточности.

Потоки могут как выполняться, так и ожидать выполнения, быть временно приостановленными (после чего возобновленными) или заблокированными. Также поток может просто завершиться. Все это – возможные состояния потока.

Многопоточность в среде .NET Framework реализована следующим образом: существуют два типа потоков: высокоприоритетный и низкоприоритетный.

Высокоприоритетный (Foreground) поток, в отличие от низкоприоритетного (или фонового - Background), назначается как тип потока по умолчанию, а также не будет остановлен в том случае, если все высокоприоритетные потоки к его процессе будут остановлены.

Умение написания многопоточных программ сводится к тому, чтобы уметь эффективно разработать объектную модель программы, которая будет использовать в ходе решения задачи несколько отдельных потоков, а также координировать работу этих потоков между собой. Такая координация работы потоков называется синхронизацией потоков. По сути, синхронизация – это специальное средство, оснащенное собственной подсистемой методов и являющееся одной из главных составляющих многопоточного программирования.

В C# классы, отвечающие за поддержку многопоточного программирования, определены в пространстве имен System.Threading.

В следующей части главы мы рассмотрим примеры создания многопоточных приложений в среде .NET.

Нет доступа к просмотру комментариев.

^
Регистрация
Регистрируясь, вы принимаете правила сайта. Если вы не получили код подтв. регистрации - не забудьте проверить папку спам.
Логин*
Email*
Пароль*
Подтверждение пароля*
 
Логин*
Код*
 
×
Восстановление пароля
Пожалуйста, заполните поля, после чего вы получите код подтверждения на ваш Email. Если код не пришел в течении нескольких минут - проверьте папку спам.
Логин

или Email
Логин*
Код подтверждения*
Новый пароль*
Подтверждение пароля*
×
Авторизация
  • Используйте вашу учетную запись на Facebook.com для входа на сайт.
  • Используйте вашу учетную запись VKontakte для входа на сайт.
  • Используйте вашу учетную запись Google для входа на сайт.
Авторизуйтесь с помощью соц. сети или с помощью аккаунта на сайте:
×