Читать книгу Полезные конспекты книг и авторские заметки по информационным технологиям. Без формул онлайн


Правильная реализация многопоточности сложна.


Ошибки в многопоточности обычно не воспроизводятся.


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


Предусмотреть перебивание потоками друг друга (требуется знание обработки байт-кода и атомарных операций модели памяти).


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


Код реализации многопоточности имеет собственный цикл разработки, модификации и настройки.


При написании кода многопоточности возникают специфические сложности.


Предусмотреть обработку обращений к общему объекту.


Инкапсулировать данные: жестко ограничить доступ и область видимости общих данных.


Вместо использования общего объекта каждому потоку можно предоставить копию.


Использовать синхронизацию.


Потоки должны быть как можно более независимы.


Постараться разбить данные на независимые подмножества, с которыми могут работать независимые потоки (возможно, на разных процессорах).


Использовать потоково-безопасные коллекции.


Использовать неблокирующие решения.


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


Модели логического разбиения поведения программы при многопоточности:

– производители-потребители: потоки-производители создают задания и помещают в буфер или очередь. Потоки-потребители извлекают задания из очереди и выполняют их. Производители перед записью дожидаются появления свободного места в очереди, а потребители дожидаются появления заданий в очереди. Производитель записывает задание и сигнализирует о том, что очередь непуста. Потребитель читает задание и сигнализирует о том, что очередь не заполнена. Обе стороны готовы ждать оповещения о возможности продолжения работы;

– модель читатели-писатели: писатели пишут в общий ресурс, который считывают читатели. Писатель может блокировать читателей. Нужно найти баланс между потребностями читателей и писателей, чтобы обеспечить правильный режим работы, нормальную производительность и избежать зависания;

– модель обедающих философов: за круглым столом сидят философы-потоки и думают, в центре – тарелка еды. Каждому философу для еды доступно 2 вилки-ресурсы – по 1 от соседей. Когда философ проголодается – берет вилки, поел – кладет обратно. Сложности проектирования – взаимные блокировки, обратные блокировки, падение производительности и эффективность работы.