Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
к зачету по техпрог.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
139.43 Кб
Скачать

Недостатки многопоточности

  • Память, используемая системой для обработки контекстных данных, необходимых в процессах, объектах AppDomain и потоках. Поэтому количество создаваемых процессов, объектов AppDomain и потоков ограничено объемом доступной памяти.

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

  • Контроль выполнения кода с большим количеством потоков достаточно сложен и может являться причиной ошибок.

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

Методы управления потоками

Start - Запускает поток.

Sleep - Приостанавливает поток на определенное время.

Suspend - Приостанавливает поток, когда он достигает безопасной точки.

Abort - Приостанавливает поток, когда он достигает безопасной точки.

Resume - Возобновляет работу приостановленного потока

Join - Приостанавливает текущий поток до тех пор, пока не будет завершен другой поток. При заданном времени ожидания этот метод возвращает значение True при условии, что другой поток закончится за это время.

Свойства потока.

IsAlive - Содержит значение True, если поток активен.

IsBackground - Возвращает или задает логическое значение, которое указывает, является ли поток (должен ли являться) фоновым потоком. Фоновые потоки отличаются от основного потока лишь тем, что они не влияют на завершение процесса. Когда обработка всех основных потоков закончена, общеязыковая среда выполнения завершает процесс, применяя метод Abort к тем фоновым потокам, которые еще продолжают существовать.

Name - Возвращает или задает имя потока. Наиболее часто используется для обнаружения отдельных потоков при отладке.

Priority - Возвращает или задает значение, используемое операционной системой для установки приоритетов потоков.

ApartmentState - Возвращает или задает потоковую модель для конкретного потока. Потоковые модели важны, когда поток вызывает неуправляемый код.

ThreadState - Содержит значение, описывающее состояние или состояния потока.

Приоритеты потоков

  • Каждый поток имеет приоритетное свойство, которое определяет, какую часть процессорного времени он должен занять при выполнении. Операционная система выделяет более длинные отрезки времени на потоки с высоким приоритетом и более короткие на потоки с низким приоритетом. Новые потоки создаются со значением Normal, но можно изменить свойство Priority на любое значение в перечислении ThreadPriority.

  • Lowest

  • BelowNormal

  • Normal

  • AboveNormal

  • Highest

  • Планирование выполнения потоков осуществляется с учетом их приоритета. 

  • Алгоритмы планирования, которые используются для определения порядка выполнения потоков, отличаются в разных операционных системах. 

  • Операционная система может также изменять приоритеты потоков динамически при перемещении фокуса пользовательского интерфейса между приложениями переднего плана и фоновыми приложениями.

  • Приоритет потока не влияет на состояние потока; чтобы операционная система могла планировать выполнение потока, состояние потока должно иметь значение Running

  • При установке уровня приоритета потока равным значению, отличному от принятого по умолчанию (ThreadPriority.Normal), следует иметь в виду, что это не предоставляет прямого контроля над тем, как планировщик потоков будет переключать потоки между собой. На самом деле уровень приоритета потока предоставляет CLR подсказку относительно важности действий потока. Таким образом, поток с уровнем приоритета ThreadPriority. Highest не обязательно гарантированно получит наивысший приоритет.

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

  • На однопроцессорных компьютерах планировщик потоков использует квантование времени – быстрое переключение между выполнением каждого из активных потоков. В Windows XP типичное значение кванта времени – десятки миллисекунд – выбрано как намного большее, чем затраты CPU на переключение контекста между потоками (несколько микросекунд).

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

  • Говорят, что поток вытесняется, когда его выполнение приостанавливается из-за внешних факторов типа квантования времени. В большинстве случаев поток не может контролировать, когда и где он будет вытеснен.