tgoop.com/careerunderhood/311
Last Update:
CPU, Memory Models, Concurrency, Multiprocess, Multithreading и Async. Часть 5. Потоки. Начало.
Продолжаем разговор о конкурентности. Сегодня разбираемся с потоками. Начнем с основ и базовых определений.
Пото́к выполне́ния (тред; от англ. thread — нить) — наименьшая единица обработки, исполнение которой может быть назначено операционной системой одному ядру процессора. По умолчанию все последовательные программы которые мы пишем имеют один поток исполнения (main).
Зачем нужны потоки если есть процессы, в чем бенефиты?
Создание процессов, если говорить в общем случае - довольно накладная операция. Потому что создание процесса это по сути копирование всей информации из текущего процесса в новый, взаимодействие с ОС и куча системных вызовов. Да, есть оптимизации которые позволяют снизить этот оверхэд и делать меньше тяжелой работы, например Copy-On-Write. Но это детали которые могут отличаться от ОС и её версии.
Создание потока в свою очередь связано с меньшими затратами, так как не нужно ничего копировать, выделять большое количество памяти. Получаем программу которая может работать также быстро как многопроцессная, но при этом расходовать меньше ресурсов.
Но какова цена? В случае многопоточной программы все потоки имеют доступ к общей памяти и ресурсам. И на плечи программиста ложится обязанность описать алгоритм корректным образом чтобы избежать неконсистентного состояния, состояния гонки, дедлоков итп.
Это здорово усложняет логику программы, поэтому наверняка вы слышали советы от коллег или на просторах сети "Пиши многопоточную программу только если избавился от всех неэффективностей в последовательном алгоритме и тебя все еще не устраивает его скорость". Отладка многопоточных программ в проде действительно сложный процесс, поэтому прибегайте к этому способу оптимизации с полным пониманием и осознанием зачем оно вам.
Как работать с потоками?
Для создания потоков в большинстве ОС используюется библиотека pthread.h - POSIX THREADS. Поверх нее реализуются уже в конкретных языках программирования красивые классы и абстракции для создания потоков.
На этом на сегодня всё, в следующем посте сделаем Deep Dive в ядро Linux и разберемся как в него завезли потоки если изначально были только процессы.
-----
Напоминаю, что моя личка открыта для всех, а если в личку неудобно то можно написать через Google Forms.
Предлагайте темы для будущих постов, задавайте вопросы или оставляйте отзывы/пожелания.😊
BY Евгений Козлов пишет про IT

Share with your friend now:
tgoop.com/careerunderhood/311