EasySwift iOS🍏
3.02K subscribers
269 photos
8 videos
395 links
Все самое интересное в мире iOS разработки 🧑🏻‍💻

Предложить статью или новость: @EasySwiftBot

По всем вопросам обращаться к @itereznikov
Download Telegram
Channel created
Многопоточность: Процесс и Поток

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

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

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

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

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

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

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

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

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

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

https://www.youtube.com/watch?v=oV9rvDllKEg
👍6🤮1
Функция высшего порядка

Функция высшего порядка – это функция, которая принимает другую функцию в качестве аргумента.
Стандартная библиотека Swift предоставляет ряд полезных методов более высокого порядка. Чаще всего используются filter, map, reduce и sorted.
👍7🤮1
Параметры In-Out

В Swift аргументы функции – константы. В результате этого невозможно изменить значение параметра, которое передается в функцию. Параметр in-out позволяет функции переназначить значение переменной. Для этого параметр помечается inout, используется & при передаче параметра в вызов функции.
👍7🤮1
9 способов прокачать производительность Swift-приложения

Optimization Level в Build Settings. Увеличится размер билда.

— Используйте final и private для методов и классов. Ограничения: работа с подклассами и диспетчеризацией.

— Избегайте print в релизных билдах.

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

— Используйте withUnsafeBufferPointer при переборе массива. Что плохого? Безопасность.

ContiguousArray. Вставка может замедлиться.

— Используйте Values (Structs), а не References (Classes) для Array. Ограничения могут быть в зависимости от ваших структур.

— Используйте Linked List вместо Array. Cортировка или поиск могут замедлиться.

— Ограничьте Protocols классами везде, где только возможно. Расплата — в «ограничениях».
👍6🤮1
.contains

При добавлении .contains к существующему набору с элементом в скобках будет возвращено значение true или false в зависимости от того, есть ли этот элемент в наборе или нет.
👍9🤮1
Коротенький (4 минуты) материал на тему того, как писать код, который не будет пожирать память 🧠
Для начала, конечно, нужно разобраться с тем, как работает память, а еще узнать про Memory Page, Memory Footprint, как избежать Memory Leaks и немного про heap 👍
В общем материал интересный, в работе точно полезен! 🔥

https://404dvd.medium.com/writing-effective-swift-code-understanding-how-the-memory-works-in-ios-part-1-6ed06eb82b11
👍4💩1
Функция stride()

Если нам нужно в массиве пройтись по значением с определенным шагом, стоит воспользоваться функцией stride(). Первый аргумент - начальное число. Второй аргумент - до какого числа идет перемещение. Третий аргумент - шаг перемещения. Он может быть как положительным, так и отрицательным.
👍12💩1