Обновить

Потоки под капотом: как работают многопоточность и синхронизация в iOS

Уровень сложностиСредний
Время на прочтение25 мин
Количество просмотров18K
Всего голосов 43: ↑43 и ↓0+47
Комментарии11

Комментарии 11

Конкурентность - про эксклюзивное владение ресурсом. Одним из таких ресурсов может быть ядро процессора. Когда вы синхронизируете параллельные потоки, вы конкурируете за общую область памяти: пока один поток эксклюзивно ею владеет, другой не может продвинуться и вынужден подождать первого (синхронизироваться с ним). А теперь страшная тайна: можно писать параллельны программы без какой-либо синхронизации (wait-free) и получать максимально эффективную загрузку ядер.

Это не так. 1. Вы потратите много времени на отладку и написание тестов для таких алгоритмов. 2. Не всегда будет быстрее на каждой строчке использовать атомики вместо блокировки региона на момент исполнения. 3. На разных архитектурах процессора вы получите разное поведение.

Атомики - это lock-free (конкуренция), а не wait-free (конвергенция).

Атомики нужны для эффективной реализации и с обычными локами, и с lock-free, и с wait-free, и с obstruction-free. Но используются они во всех этих подходах по-разному.

(Они не обязательны - см. например Peterson lock - но с ними в разы удобнее.)

Это барьеры памяти всем нужны, а не атомики. wait-free не совместим с любыми локами (включая, разумеется, спинлоки) по определению.

Вы действительно не различаете атомарные операции и локи?

Угу, убедительно. Отвык от строго понимания этого термина, слишком редко попадается вокруг...

Может мы о разном говорим? Может вы имеете введу параллельные программы на подобии процессов в операционной системе, которые параллельны и не блокируют друг друга пока не пересекаются интересы? И как бы синхронизировать ничего не надо.

Спросил у Гугля про 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. "

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
kts.tech
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия