iOS Makes Me Hate
3.93K subscribers
1.17K photos
168 videos
15 files
1.34K links
Авторский канал про iOS разработку. Путь продуктовых самураев в MAANG.

Самое больше iOS сообщество практиков: https://boosty.to/lionbond/

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
я в авито.

с 16 мая работаю тут. прохожу онбординг и под сильнейшим впечатлением.
за свои 8 лет опыта в разных компаниях у меня не было того, что соответствует моим ожидания по процессам, технологиях. Как я уже говорил: "Авито — это частица Европы в России". Живой пример всех сомнений, что в россии не приживается демократия и аджайл мышление.

Живой пример многих реальностей, кому многим кажутся недостижимыми фантазиями. Я дико впечатлен многими вещами, описывать которые не хватит времени. Но скину базовые вещи, на котором держится многое — это принципы.
👍18💩3🔥2
Bloomberg: Apple показала AR/VR-гарнитуру на последнем совете директоров

– Члена СД представили новую гарнитуру смешанной реальности
– AR/VR-гарнитуру показали составу из 8 независимых директоров
– Также Apple направила больше ресурсов на разработку rOS
– Предполагается, что так может называться ОС для гарнитуры
– Дебют нового продукта может состояться в ближайшие месяцы
– Старт продаж нового устройства запланирован на 2023 год
– На бизнес по продаже девайсов приходится 80% выручки Apple
🔥6👍1
Многопоточность: Процесс и Поток

Многопоточка входит в блок обязательных вопросов. По мне он самый сложный из всех. Я сам могу путаться. Сейчас подтягиваю и углубляю знания. Начну с общей теории и перейду в глубь.
И начнем с самой базы.

Process выполняет действия, указанные в памяти программы. ОС помогает создавать, планировать и завершать процессы, используемые процессором.

Thread — небольшой фрагмент процесса. Процесс может иметь несколько потоков, и все они выполняются одновременно.

Ключевые отличия:
- Процесс — это выполнение программы
- Поток — это часть процесса.
- Процессы не легковесные, тогда как потоки легки.
- Для создания и завершения процесса нужно больше времени, а для потока — меньше.
- Процессу требуется больше времени для переключения контекста
- Процессы изолированы и не делятся данными между собой, а потоки делятся
- Потоки совместно используют инструкции, глобальные области и области кучи. Однако у него есть свой регистр и стек.
🔥15
Многопоточность: Конкурентность и Параллелизм

Мы уже знаем о процессе и потоке.
Процесс выделяется на одно ядро, а поток — это маленькие фрагменты нашего процесса

Но как назвать мультизадачность и мультипоточность? Ответ — Конкурентность и Параллелизм. Их часто путаем между собой, поэтому стоит определиться.

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

Представим что вы пишите код и слушаете музыку, работая на одноядерном процессоре. На уровне операционной системы, эти задачи разбиваются на отдельные блоки, которые выполняются процессором по очереди, а переключение между этими блоками происходит настолько быстро, что создается впечатление, будь-то эти процессы выполняются одновременно. Однако это не так.

Конкурентность - это способность компьютера справляться с множеством задач одновременно, в то время как параллелизм - способность компьютера выполнять несколько задач одновременно. Это про то, как мы структурируем логику выполнения программы, как мы делим ее на логические блоки, которые могут выполняться параллельно или поочередно.

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

https://www.youtube.com/watch?v=oV9rvDllKEg
🔥8
👍11
🤔6😁5💩5
Самый распространенный вопрос от новичков: "А должен ли я учить swiftUI?".

Очевидный спойлер: Нам нужно учить и то, и другое

https://www.hackingwithswift.com/quick-start/swiftui/answering-the-big-question-should-you-learn-swiftui-uikit-or-both
👍1
Проблемы многопоточки: Race Condition vs Data Race

Как все знают многопоточка нужна для ускорения задач и их фрагментов на устройствах. Но все не так просто и любой инструмент дает свои проблемы. Выше, в опросе, мы уже столкнулись с гонкой.

Race condition и data race — две разные проблемы многопоточности, которые часто путают.

Эти проблемы очень похожи, но есть различия:

Race Condition — это недостаток, возникающий, когда время или порядок событий влияют на правильность программы.

Data Race — это состояние когда разные потоки обращаются к одной ячейке памяти без какой-либо синхронизации и как минимум один из потоков осуществляет запись.
👍11
Примитивы синхронизации: NSLock, NSRecursiveLock, NSCondition

Для решения проблемы синхронизации данных в iOS есть множество решений. Начнем с базовых типов.

NSLock
Когда поток пытается заблокировать объект возможно два варианта, поток либо сможет это сделать и продолжит работу, либо будет ожидать пока другой поток, успевший раньше заблокировать объект, не вызовет unlock() тем самым освободив блокировку.

NSLock и другие блокировки Foundation несправедливы, в том смысле, что когда несколько потоков ожидает освобождения объекта блокировки, они не получат его в том порядке в каком они пытались наложить блокировку. При большом количестве потоков это может служить проблемой, когда один из потоков никогда не получит доступ в положенное время.
🔥5
NSRecursiveLock

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

Если заменить NSRecursiveLock на NSLock, выполнение, хотя и внутри одного потока, встанет на вызове rlock.lock() метода callMe()
🔥5
NSCondition

NSCondition обеспечивают простой способ ждать выполнения условия.

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

Это может быть реализовано путем непрерывной или периодической проверки этого условия (ожидание занятости), но при этом, что произойдет с блокировками потока? Должны ли мы держать их, пока мы ждем или освободим их в надежде, что мы сможем их снова приобрести, когда условие будет выполнено?

NSCondition обеспечивают чистое решение этой проблемы, как только поток поставил блокировку (вызвал lock()) он может быть помещен в лист ожидания для этого условия и проснуться, как только другой поток сигнализирует о том, что условие выполнено.
🔥7
Многопоточное vs асинхронное программирование

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

Асинхронное программирование подразумевает инициацию некоторой операцию, об окончании которой главный поток узнает спустя некоторое время. Обычно это применяется для работы с системой ввода-вывода: диски, сеть и т.д. При этом, если это все сделано правильно, никакого потока нет.

https://habr.com/ru/post/216659/
🔥8