Многопоточность на туалетах

Сейчас объясню многопоточку iOS так, что на всю жизнь запомнится — на туалетах!
Последовательная очередь

Есть одна кабинка, в ней помещается один человек за раз. Все желающие выстраиваются в очередь.

Можно сделать две очереди из двух туалетов для мальчиков и девочек, но внутри все равно только один унитаз.
Конкурентная очередь

В одном туалете несколько кабинок, несколько человек за раз.

Почему это не несколько отдельных последовательных очередей? Потому что две конкурентные очереди нужны для мужского и женского туалета, в каждом по несколько унитазов
Синхронное выполнение на очереди

Ваш друг хочет пописать и вы его ждете. Вам не важно сколько в туалете кабинок и какой процесс внутри, вы пойдете в кино когда ваш друг выйдет, а пока вы его ждете.
Асинхронное выполнение на очереди

Ваш друг идет писать, а вы пока идете билет покупать и стоять в своей очереди на билет
Барьер на конкурентной очереди

Вы приходите пописать, но техничка ждет когда из туалетов все выйдут, чтобы их почистить за раз и никого не смущать. Техничка — барьер. Пока туалеты не почистят она никого не пустит, но и сама дождется пока все выйдут.
Барьер не имеет смыла на последовательной очереди в одну кабинку — техничка просто займет место в очереди и никто не знает почистит она его или по своим делам зайдет.
Диспатч Групп

Это учитель ведет школьников в театре в туалет: считает сколько ушло и сколько вернулась обратно. Пока последний школьник не выйдет вся группа никуда не двинется.
Диспатч эплай

У школьного учителя есть возможность отправить всех сразу в несколько туалетов, при этом ведет учет кто где.

Если все пойдут по-большому, то получится быстрее, но если все лишь пописать сбегали, то на ведении списков уйдет больше времени чем на сами процедуры.
Креш при одновременном доступе

Вы сели в кабинку выполнять операцию на чтение, а кто-то ломится в ней выполнить запись. Если дверь не закрыта, то человек вломится к вам и обоим будет некомфортно, а приложения ваще вылетают от такого.
Чтобы в кабинку никто не вломился нужно дверь на замочек закрывать пока вы внутри и оставлять открытой когда выходите. Это локи.
Производительные и энергоэффективные ядра

Не всегда вам нужно прям занять кабинку, иногда достаточно быстро сикнуть и пойти дальше. Для этого есть энергоэффективные настенные писуары. Чаще этого достаточно.

Кто не согласен может сравнить посмотреть на очередь в женский туалет.
Если у вас производительная задача, то лучше пойти в кабинку и нагрузить ее по полной.
Актор

Высокие материи: туалетам тут ваще не место, поэтому тут будет очередь на стойку регистрации в аэропорте.

Стоек много, но у каждой своя очередь, в ней никто не толкается и все идут друг за другом. В обход очереди нельзя никак, такая очередь это асинхронный контекст.
Дедлок

Я не могу зайти в кабинку, потому что она занята и не могу отодвинуться или развернуться, а из кабинки не могут выйти, потому что выход заблокирован

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Михаил Рубанов

Михаил Рубанов Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @akaDuality

Jan 26
Как я handoff подключал

С ней Apple позволяет быстро продолжить работу на другом устройстве. Для VoiceOver Designer это полезно: рисуешь прототип на компе, тут же проверяешь как он звучит на телефон.

Было ли легко? Пришлось использовать чуть ли не весь тулинг что был под рукой
Документация: если у вас document-based application, то все заводится с полпинка — в описании файла добавляете флаг NSUbiquitousDocumentUserActivityType с каким-нибудь ключом и готово.

Заработало? Да, подсказки появились. Закончилась ли на этом фича? Нет
С айфона на мак открывается все хорошо, а вот с мака на айфон открывается только тот документ, который был открыт первым.

Пытаюсь продебажить. Начинаю с айфона, он ведь не работает. URL в айфон и правда приходит один и тот же, значит айфон нормально работает
Read 14 tweets
Dec 3, 2021
У меня появился повод вспомнить про фичу, которую сделали пару лет назад — интерфейс выбора пиццы из половинок в Додо.

Расскажу как дизайнили, почему и какие решения приняли. От идеи до прода в одном треде.
Продукт показываем крупно, в полную ширину экрана. Можно было бы еще крупнее — вынести за пределы экрана, но нам важна форма пиццы, а не начинка.
Управлять контентом напрямую кайфово, поэтому двигаем пиццы под пальцем. Получается два вертикальных списка. Выбранная пицца крупно, остальные уходят в фон, все интерактивно изменяется. смотрите в движении:
Read 10 tweets
Oct 21, 2021
Как я сборку ускорял

Пару недель назад столкнулся с тем, что проект долго собирается. Ну вы знаете, если программируете на iOS. Начал разбираться.

Тред
Взял тулзу xcode build times, она ставит метки вокруг каждого фреймворка. Прогнал билд, нарисовал диаграмму Ганта.

github.com/PaulTaykalo/xc…
Мы уже пару лет занимаемся распилом и 70% кода в модулях. Но тогда на графе 60% времени уходит на компиляции 30% монолита. Image
Read 26 tweets
Jul 4, 2021
Редизайним клавиатуру

Уже сотню лет никто не решается массово заредизайнить клаву. У Эпла последняя выглядит вот так. Давайте немного подвигаем кнопки и посмотрим как можно сделать лучше.
Наши пальцы двигаются впереди и назад, а не по диагонали, поэтому кнопки выравниваем в колонки.
Длина боковых клавиш нужна была только для компенсации сдвига, укоротим кнопки обратно. Не спешите бомбить за короткий энтер, его еще подвинем поудобней.
Read 31 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(