- Оглавление
- Виды многопоточности
- Корутины vs Треды
- Поток vs Процесс
- Примитивы синхронизации
- Deadlock
- Race condition
- Lock-free
- Асинхронное vs синхронное программирование
- thread-pool
- Виды многопоточности:
- Вытесняющая или приоритетная (режим реального времени) - вид многозадачности, в котором операционная система сама передает управление от одной выполняемой программы другой в случае завершения операций ввода-вывода, возникновения событий в аппаратуре компьютера, истечения таймеров и квантов времени, или же поступлений тех или иных сигналов от одной программы к другой. #TODO https://habr.com/ru/post/40227/
- Совместная или кооперативная - тип многозадачности, при котором следующая задача выполняется только после того, как текущая задача явно объявит себя готовой отдать процессорное время другим задачам.
- Корутины vs Треды: Треды управляются средствами ОС, корутины с помощью планировщика реализованного в языке программирования. #TODO
- Поток vs Процесс: процессы выполняются в отдельных пространствах памяти, потоки используют одно адресное пространство. Потоки выполняются внутри процессов. Единица процесса отдельное приложение.
- Примитивы синхронизации:
- Семафор - в основе лежит счетчик, над которым можно производить атомарные операции: инкремент и декремент. При значении счетчика 0, семафор блокируется. Используется, как механизм оповещения.
- Счетный семафор - позволяет X потокам иметь одновременный доступ к ресурсу.
- Бинарный семафор - может принимать значения либо 0, либо 1.
- Мьютекс - используется, как механизм блокировки, для синхронизации доступа к ресурсам. Только один владелец может получить мьютекс, он же и должен будет его освободить.
- Шаред мьютекс (read-write mutex) - если ресурс блокируется на чтение, то у него может быть несколько владельцев, если блокируется на запись, то только один.
- Condition variables - блокирует поток до момента поступления сигнала от другого потока о выполнении некоторого условия или до истечения максимального промежутка времени ожидания.
- Спинлоки - мьютекс ожидающий освобождения не передавая управление в планировщик.
- Атомарные операции - операция, которая либо выполняется целиком, либо не выполняется вовсе.
- Семафор - в основе лежит счетчик, над которым можно производить атомарные операции: инкремент и декремент. При значении счетчика 0, семафор блокируется. Используется, как механизм оповещения.
- Deadlock: классический тупик возникает, если процесс A получает доступ к файлу A и ждет освобождения файла B. Одновременно процесс B, получив доступ к файлу B, ждет освобождения файла A. Оба процесса теперь ждут освобождения ресурсов другого процесса и не освобождают при этом собственный файл.
- Race condition: ошибка проектирования многопоточной системы, при которой работа системы зависит от порядка выполнения кода. Из-за неконтролируемого доступа к общей памяти состояние гонки может приводить к совершенно различным ошибкам, которые могут проявляться в непредсказуемые моменты времени, а попытка повторения ошибки в целях отладки со схожими условиями работы может оказаться безуспешной.
- Lock-free: #TODO
- Конкурентность:
- Параллельность: когда несколько инструкций выполняется одновременно
- Асинхронность: когда операцию мы можем выполнять не дожидаясь результата на месте
- Синхронность: когда код выполняется последовательно
- thread-pool:
- stackful vs stackless:
- cache contention: