Комментарии 11
Конкурентность - про эксклюзивное владение ресурсом. Одним из таких ресурсов может быть ядро процессора. Когда вы синхронизируете параллельные потоки, вы конкурируете за общую область памяти: пока один поток эксклюзивно ею владеет, другой не может продвинуться и вынужден подождать первого (синхронизироваться с ним). А теперь страшная тайна: можно писать параллельны программы без какой-либо синхронизации (wait-free) и получать максимально эффективную загрузку ядер.
Это не так. 1. Вы потратите много времени на отладку и написание тестов для таких алгоритмов. 2. Не всегда будет быстрее на каждой строчке использовать атомики вместо блокировки региона на момент исполнения. 3. На разных архитектурах процессора вы получите разное поведение.
Атомики - это lock-free (конкуренция), а не wait-free (конвергенция).
Атомики нужны для эффективной реализации и с обычными локами, и с lock-free, и с wait-free, и с obstruction-free. Но используются они во всех этих подходах по-разному.
(Они не обязательны - см. например Peterson lock - но с ними в разы удобнее.)
Может мы о разном говорим? Может вы имеете введу параллельные программы на подобии процессов в операционной системе, которые параллельны и не блокируют друг друга пока не пересекаются интересы? И как бы синхронизировать ничего не надо.
Я про параллельные потоки, которым надо постоянно коммуницировать, но при этом не тормозить из-за этой коммуникации.
Спросил у Гугля про concurrency, получил вот: "Concurrency means multiple computations are happening at the same time. Concurrency is everywhere in modern programming, whether we like it or not: Multiple computers in a network. Multiple applications running on one computer. Multiple processors in a computer (today, often multiple processor cores on a single chip) "
Или вот: "Concurrency refers to the ability of a system to execute multiple tasks through simultaneous execution or time-sharing (context switching), sharing resources and managing interactions. Concurrency improves responsiveness, throughput, and scalability in modern computing, including: Operating systems and embedded systems. "
Потоки под капотом: как работают многопоточность и синхронизация в iOS