Принципы объектно-ориентированного программирования




ГЛАВА 15 Программирование многопоточности


    ГЛАВА 15 Программирование многопоточности
    ГЛАВА 15 Программирование многопоточности Основы организации потоков. Потоки и многозадачность. Переключение контекста. Многопоточное приложение на С#. Работа с потоками. AppDomain. Класс Thread....
    Основы организации потоков
    Основы организации потоков Однопоточное приложение похоже на супермаркет, где работает единственный кассир. Один кассир обходится владельцу магазина дешевле, но он может обслужить за определенное...
    Потоки и многозадачность
    Потоки и многозадачность Поток является единицей обработки данных, а многозадачность — это одновременное исполнение нескольких потоков. Существует два вида многозадачности — совместная (cooperativ...
    Переключение контекста
    Переключение контекста Неотъемлемый атрибут потоков — переключение контекста (context switching) — вызывает порой затруднения, поэтому позвольте мне привести его краткий обзор. Процессор с помощью...
    Многопоточное приложение на С#
    Многопоточное приложение на С# Прежде чем изучать способы использования потоков на С#, посмотрим, как легко создать вторичный поток на С#. Обсудив этот пример, я подробнее рассмотрю пространство и...
    Работа с потоками
    Работа с потоками Создание потоков и управление ими осуществляется с помощью класса System. Threading. Thread. С него мы и начнем....
    AppDomain
    AppDomain В .NET потоки работают в сущности под названием AppDomain. Вы порой будете слышать, что AppDomain аналогичен процессу Win32 в том, что он предлагает большинство тех же преимуществ, включ...
    Класс Thread
    Класс Thread Практически все, что вы делаете с потоками, вы делаете, используя класс Thread. В этом разделе класс Thread рассматривается в контексте решения основных задач организации потоков....
    Создание потоков и объектов Thread
    Создание потоков и объектов Thread Вы можете создавать экземпляры объекта Thread двумя способами. Один вы уже видели: это создание нового потока и получение объекта Thread, позволяющего манипулиро...
    Управление временем существования потоков
    Управление временем существования потоков Чтобы управлять активностью или временем жизни потока, надо решить массу задач. С Ътим позволяют справиться методы Thread. Например, довольно часто поток...
    Уничтожение потоков
    Уничтожение потоков Уничтожить поток можно вызовом метода Thread.Abort. Исполняющая среда насильно завершает выполнение потока, генерируя исключение ThreadAbortException. Даже если метод попытаетс...
    Планирование потоков
    Планирование потоков При переключении процессора по окончании выделенного потоку кванта времени, процесс выбора следующего потока, предназначенного для исполнения, далеко не произволен. У каждого...
    Примечание
    Примечание Несколько потоков с одинаковым приоритетом получают равное количество процессорного времени. Это называется циклическим планированием (round robin scheduling)....
    Безопасность и синхронизация потоков
    Безопасность и синхронизация потоков При программировании для однопоточного окружения методы зачастую пишутся так, что на некоторых этапах исполнения кода объекты временно находятся в недействител...
    Защита кода с помощью класса Monitor
    Защита кода с помощью класса Monitor Класс System. Monitor позволяет упорядочить обращения к блокам кода с помощью блокировки и освобождения. Например, ваш метод, обновляющий БД, не может выполнят...
    Применение блокировок монитора с оператором С# lock
    Применение блокировок монитора с оператором С# lock Оператор С# lock не поддерживает полный набор функций класса Monitor, но все же позволяет получать и освобождать блокировку монитора. Чтобы заде...
    Синхронизация кода с помощью класса Mutex
    Синхронизация кода с помощью класса Mutex Класс Mutex, определенный в пространстве имен System. Threading, — это представление примитива системы Win32 с тем же именем для периода выполнения. Вы мо...
    Безопасность потоков и классы .NET
    Безопасность потоков и классы .NET В группах новостей и почтовых рассылках я часто встречал вопрос: во всех ли классах System.* .NET обеспечена безопасность потоков? Отвечаю: нет, но так и должно...
    Правила использования потоков
    Правила использования потоков Когда использовать потоки, а когда лучше всего бежать от этого, как от чумы? В этом разделе я опишу некоторые распространенные сценарии, в которых потоки могут быть ч...
    Когда использовать потоки
    Когда использовать потоки Когда вы стремитесь достичь повышенного параллелизма, упростить конструкцию и эффективнее использовать процессорное время....
    Повышенный параллелизм
    Повышенный параллелизм Очень часто приложениям требуется выполнять несколько задач одновременно. Например, однажды я писал систему хранения документации для банка, которая получала данные с оптиче...
    Упрощенная структура
    Упрощенная структура Популярный способ упрощения структуры сложных систем — использование очередей и асинхронной обработки. Чтобы задействовать такую конструкцию, вам придется подготовить очереди...
    Лучшее использование процессорного времени
    Лучшее использование процессорного времени Часто ваше приложение реально не выполняет никакой работы, в то же время продолжая использовать свой квант. В моем примере с системой хранения документац...
    Когда лучше обойтись без потоков
    Когда лучше обойтись без потоков Распространенной ошибкой новичков является попытка развертывания нескольких потоков в каждом приложении. Это может быть намного хуже, чем вовсе не иметь потоков! К...
    Затраты больше выгод
    Затраты больше выгод Как вы узнали из раздела Безопасность потоков и синхронизация, написание многопоточных приложений занимает несколько больше времени и требует больших усилий. Бывает, что небол...
    Производительность для обоих случаев невозможно сравнить
    Производительность для обоих случаев невозможно сравнить Если вы — новичок в программировании многопоточности, для вас может быть неожиданностью обнаружить, что издержки, связанные с созданием и д...
    Нет веской причины
    Нет веской причины Не следует рассматривать применение многопоточности как подход по умолчанию. Из-за врожденной сложности написания многопоточных приложений всегда следует ориентироваться на одно...
    Подведем итоги
    Подведем итоги Многопоточность позволяет приложениям разделять задачи и решать независимо каждую из них, максимально эффективно используя процессорное время. Однако многопоточность является верным...








Начало