Получи случайную криптовалюту за регистрацию!

Долго собирался с силами написать новый пост. То одно прилетае | Of Code & Men

Долго собирался с силами написать новый пост. То одно прилетает, то другое, то сил, то времени нет. И эта ситуация подсказала мне рассказать о степенях неблокирующей синхронизации*.

Представим себе, что человек - это алгоритм по обработке параллельных задач. Даже особо представлять не приходится, всё так и есть.

Существует три уровня синхронизации (от слабого к сильному):

* obstruction-free (без препятствий). Я взял задачу и, если ничто меня не будет отвлекать, закончу её за конечное число шагов. Примеры: чистка зубов, поездка на работу, просмотр очередной серии любимого сериала. Это самая слабая из гарантий, но даже она не всегда выполняется. Например, если я играю в “три-в-ряд” или MMORPG - я никогда не выполню задачу (не пройду игру) за конечное число шагов, потому что сами по себе они бесконечны.

* lock-free (без блокировок). Это тот уровень синхронизации, который присущ большинству людей. Он гарантирует, что с течением времени хотя бы одна задача будет продвигаться к своему завершению. То есть, если я не лежу на диване, не залипаю в интернете на котиков (и не играю в MMORPG), то я так или иначе делаю что-то полезное: работаю, готовлю, пишу статью или изучаю что-то новое. Казалось бы, что еще нужно? Но есть более строгая гарантия

* wait-free (без ожидания). Живу я, делаю в каждый момент времени что-то полезное и развивающее, а на пост новый времени нет. И так может продолжаться до бесконечности. Это всё потому, что мой алгоритм работы - не wait-free. А этот уровень гарантирует, что каждая взятая в работу задача будет завершена за конечное число шагов, не зависящее от других задач. Главное отличие от предыдущего уровня в моём случае, что, совершая ежедневно какую-то работу, я успокаивал себя тем, что продвигаюсь вперёд, но при этом новых постов тут не появлялось.
Думаю, каждый может привести пример, нарушающий гарантию wait-free - разобрать балкон, сходить к стоматологу, выучить язык…

Твой алгоритм жизни ложится в один из этих уровней. Но это лишь критерии, в них нет подсказки о том, как достичь нужного уровня. Над задачей “как всё успевать” каждому придётся работать самому.

*Неблокирующая синхронизация — подход в параллельном программировании на симметрично-многопроцессорных системах, в котором принят отказ от традиционных примитивов блокировки, таких, как семафоры, мьютексы и события. Разделение доступа между потоками идёт за счёт атомарных операций и специальных, разработанных под конкретную задачу, механизмов блокировки. (Википедия)