Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Задачи многопоточности




Многопоточность

 

Якимов И.М.

 

Данная статья описывает реализацию и использование многопоточности в среде.NET Framework.

 

Оглавление

 

Многопоточность. 1

Оглавление. 1

Задачи многопоточности. 2

Методы создания потоков. 3

Делегаты.. 3

Ожидание завершения работы потока. 3

Получение результата работы метода, выполнявшегося в отдельном потоке. 4

Класс Thread. 5

Ожидание завершения потока. 7

Управление выполнением потока. 7

«Сон» потока. 8

Приоритет потоков. 9

Фоновые потоки и потоки «переднего плана». 9

Класс ThreadPool 10

Синхронизация потоков. 11

Оператор lock. 11

Класс ReaderWriterLock. 13

Класс Mutex. 14

Класс WaitHandle. 15

Класс AutoResetEvent. 15

Класс ManualResetEvent. 17

Блокировка потоков. 18

Взаимодествие с пользовательским интерфейсом.. 19

WinForms. 19

Метод Invoke. 19

Использование SynchronizationContext. 20

Класс BackgroundWorker. 21

WPF. 23

Объект Dispatcher. 24

Класс BackgroundWorker. 24

Заключение. 24

 

Задачи многопоточности

 

Многопоточность представляет собой возможность выполнять несколько кусков кода «параллельно». Слово параллельно заключено в кавычки потому, что на самом деле процессор компьютера способен одновременно выполнять только одну инструкцию. Поэтому в каждый момент времени на нем выполняется только один поток. Соответственно двухъядерный процессор способен одновременно выполнять 2 потока и т.д.

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

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

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

Какие же требования обычно предъявляются к механизмам, обеспечивающим поддержку многопоточности в языке программирования?

1. Конечно же необходимы простые средства создания отдельных потоков кода.

2. Во-первых, нам необходимо знать, когда поток завершил свою работу. Необходимы механизмы, позволяющие подождать, пока поток не завершит свое выполнение.

3. Иногда требуется отменить выполнение задачи, которую исполняет поток.

4. Иногда необходимо приостановить исполнение потока, например, чтобы освободить используемые им вычислительные ресурсы.

5. Необходимы механизмы, позволяющие синхронизировать доступ нескольких потоков к различным ресурсам.

Далее мы рассмотрим, как реализуются эти и другие связанные с потоками задачи на платформе.NET.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных