Skip to content

Latest commit

 

History

History
37 lines (36 loc) · 6.02 KB

multithreading.md

File metadata and controls

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