Многопоточность: Процесс и Поток
Многопоточка входит в блок обязательных вопросов. По мне он самый сложный из всех. Я сам могу путаться. Сейчас подтягиваю и углубляю знания. Начну с общей теории и перейду в глубь.
И начнем с самой базы.
Process выполняет действия, указанные в памяти программы. ОС помогает создавать, планировать и завершать процессы, используемые процессором.
Thread — небольшой фрагмент процесса. Процесс может иметь несколько потоков, и все они выполняются одновременно.
Ключевые отличия:
- Процесс — это выполнение программы
- Поток — это часть процесса.
- Процессы не легковесные, тогда как потоки легки.
- Для создания и завершения процесса нужно больше времени, а для потока — меньше.
- Процессу требуется больше времени для переключения контекста
- Процессы изолированы и не делятся данными между собой, а потоки делятся
- Потоки совместно используют инструкции, глобальные области и области кучи. Однако у него есть свой регистр и стек.
Многопоточка входит в блок обязательных вопросов. По мне он самый сложный из всех. Я сам могу путаться. Сейчас подтягиваю и углубляю знания. Начну с общей теории и перейду в глубь.
И начнем с самой базы.
Process выполняет действия, указанные в памяти программы. ОС помогает создавать, планировать и завершать процессы, используемые процессором.
Thread — небольшой фрагмент процесса. Процесс может иметь несколько потоков, и все они выполняются одновременно.
Ключевые отличия:
- Процесс — это выполнение программы
- Поток — это часть процесса.
- Процессы не легковесные, тогда как потоки легки.
- Для создания и завершения процесса нужно больше времени, а для потока — меньше.
- Процессу требуется больше времени для переключения контекста
- Процессы изолированы и не делятся данными между собой, а потоки делятся
- Потоки совместно используют инструкции, глобальные области и области кучи. Однако у него есть свой регистр и стек.
👍8🤮1
Многопоточность: Конкурентность и Параллелизм
Мы уже знаем о процессе и потоке.
Процесс выделяется на одно ядро, а поток — это маленькие фрагменты нашего процесса
Но как назвать мультизадачность и мультипоточность? Ответ — Конкурентность и Параллелизм. Их часто путаем между собой, поэтому стоит определиться.
Конкурентность - это возможность разбивать алгоритм или компьютерную программу на отдельные блоки, которые могут выполняться независимо и коммуницировать между собой. Конкурентность может быть на одном ядре и будет казаться, что все выполняется одновременно.
Представим что вы пишите код и слушаете музыку, работая на одноядерном процессоре. На уровне операционной системы, эти задачи разбиваются на отдельные блоки, которые выполняются процессором по очереди, а переключение между этими блоками происходит настолько быстро, что создается впечатление, будь-то эти процессы выполняются одновременно. Однако это не так.
Конкурентность - это способность компьютера справляться с множеством задач одновременно, в то время как параллелизм - способность компьютера выполнять несколько задач одновременно. Это про то, как мы структурируем логику выполнения программы, как мы делим ее на логические блоки, которые могут выполняться параллельно или поочередно.
Параллелизм — это одновременное выполнение разных частей одной задачи. Параллелизм требует многоядерный процессор. Многоядерный процессор способен обрабатывать несколько инструкций в единицу времени, по одной инструкции на ядро. Соответственно, многоядерные процессоры умеют выполнять несколько задач одновременно, за счет чего достигается параллелизм.
https://www.youtube.com/watch?v=oV9rvDllKEg
Мы уже знаем о процессе и потоке.
Процесс выделяется на одно ядро, а поток — это маленькие фрагменты нашего процесса
Но как назвать мультизадачность и мультипоточность? Ответ — Конкурентность и Параллелизм. Их часто путаем между собой, поэтому стоит определиться.
Конкурентность - это возможность разбивать алгоритм или компьютерную программу на отдельные блоки, которые могут выполняться независимо и коммуницировать между собой. Конкурентность может быть на одном ядре и будет казаться, что все выполняется одновременно.
Представим что вы пишите код и слушаете музыку, работая на одноядерном процессоре. На уровне операционной системы, эти задачи разбиваются на отдельные блоки, которые выполняются процессором по очереди, а переключение между этими блоками происходит настолько быстро, что создается впечатление, будь-то эти процессы выполняются одновременно. Однако это не так.
Конкурентность - это способность компьютера справляться с множеством задач одновременно, в то время как параллелизм - способность компьютера выполнять несколько задач одновременно. Это про то, как мы структурируем логику выполнения программы, как мы делим ее на логические блоки, которые могут выполняться параллельно или поочередно.
Параллелизм — это одновременное выполнение разных частей одной задачи. Параллелизм требует многоядерный процессор. Многоядерный процессор способен обрабатывать несколько инструкций в единицу времени, по одной инструкции на ядро. Соответственно, многоядерные процессоры умеют выполнять несколько задач одновременно, за счет чего достигается параллелизм.
https://www.youtube.com/watch?v=oV9rvDllKEg
YouTube
Concurrency is not Parallelism by Rob Pike
Slides:
https://talks.golang.org/2012/waza.slide
https://talks.golang.org/2012/waza.slide
👍6🤮1
Параметры In-Out
В Swift аргументы функции – константы. В результате этого невозможно изменить значение параметра, которое передается в функцию. Параметр in-out позволяет функции переназначить значение переменной. Для этого параметр помечается inout, используется & при передаче параметра в вызов функции.
В 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 классами везде, где только возможно. Расплата — в «ограничениях».
— Optimization Level в Build Settings. Увеличится размер билда.
— Используйте final и private для методов и классов. Ограничения: работа с подклассами и диспетчеризацией.
— Избегайте print в релизных билдах.
— Последовательный код. Когда вы добавляете новую функцию, вы форсите Swift использовать таблицу виртуализации для динамического выполнения вашего кода.
Этот пункт всегда компромисс между производительностью и чистым кодом.
— Используйте withUnsafeBufferPointer при переборе массива. Что плохого? Безопасность.
— ContiguousArray. Вставка может замедлиться.
— Используйте Values (Structs), а не References (Classes) для Array. Ограничения могут быть в зависимости от ваших структур.
— Используйте Linked List вместо Array. Cортировка или поиск могут замедлиться.
— Ограничьте Protocols классами везде, где только возможно. Расплата — в «ограничениях».
👍6🤮1
Коротенький (4 минуты) материал на тему того, как писать код, который не будет пожирать память 🧠
Для начала, конечно, нужно разобраться с тем, как работает память, а еще узнать про
В общем материал интересный, в работе точно полезен! 🔥
https://404dvd.medium.com/writing-effective-swift-code-understanding-how-the-memory-works-in-ios-part-1-6ed06eb82b11
Для начала, конечно, нужно разобраться с тем, как работает память, а еще узнать про
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
Medium
Writing effective Swift code understanding how the memory works in iOS [part 1]
Memory Footprint and common memory issues
👍4💩1
Функция stride()
Если нам нужно в массиве пройтись по значением с определенным шагом, стоит воспользоваться функцией stride(). Первый аргумент - начальное число. Второй аргумент - до какого числа идет перемещение. Третий аргумент - шаг перемещения. Он может быть как положительным, так и отрицательным.
Если нам нужно в массиве пройтись по значением с определенным шагом, стоит воспользоваться функцией stride(). Первый аргумент - начальное число. Второй аргумент - до какого числа идет перемещение. Третий аргумент - шаг перемещения. Он может быть как положительным, так и отрицательным.
👍12💩1
Метод наборов .symmetricDifference()
Sets (наборы) представляют собой неупорядоченные коллекции уникальных элементов. Вы можете создать новый набор из элементов, содержащихся в каждом наборе, но исключить одинаковые для обоих наборов элементы. Для этого используйте метод .symmetricDifference().
Sets (наборы) представляют собой неупорядоченные коллекции уникальных элементов. Вы можете создать новый набор из элементов, содержащихся в каждом наборе, но исключить одинаковые для обоих наборов элементы. Для этого используйте метод .symmetricDifference().
👍11🤮1
Полезный материал о базовых вещах с памятью
Изучая иос не нужно забывать, что этот мир яблок не отдельный остров, который далек от компьютерных наук. А лишь абстракция над общим устройством компьютеров
https://youtu.be/TajLTcjBgIg
Изучая иос не нужно забывать, что этот мир яблок не отдельный остров, который далек от компьютерных наук. А лишь абстракция над общим устройством компьютеров
https://youtu.be/TajLTcjBgIg
YouTube
Лекция 3. Работа с памятью, выполнение программ (Программирование на C++, часть 1)
https://compscicenter.ru/
Лекция №3 в курсе "Программирование на C++, часть " (осень 2018).
Преподаватель курса: Валерий Михайлович Лесин
Лекция №3 в курсе "Программирование на C++, часть " (осень 2018).
Преподаватель курса: Валерий Михайлович Лесин
❤7👍1🤮1
Optional Binding
Optional Binding позволяет проверить, содержит ли опционал .some-значение. Если содержит, извлекает его и предоставляет к нему доступ с помощью локальной переменной (обычно константной). Optional Binding работает в контексте конструкций if, while и guard. Если опционал в состоянии nil, запускается блок else.
Optional Binding позволяет проверить, содержит ли опционал .some-значение. Если содержит, извлекает его и предоставляет к нему доступ с помощью локальной переменной (обычно константной). Optional Binding работает в контексте конструкций if, while и guard. Если опционал в состоянии nil, запускается блок else.
❤14🤮1
Media is too big
VIEW IN TELEGRAM
Для чего нужны closures (замыкания) в Swift и как с ними работать?
📖 Замыкания - это мощная концепция, которая позволяет использовать множество различных шаблонов программирования.
Однако для многих начинающих программистов closures могут быть сложными в понимании и дальнейшем использовании.
Это особенно верно, когда замыкания используются в асинхронном контексте.
Например, когда они используются в качестве completion handlers или передаются в приложении, чтобы их можно было вызвать позже.
В своём посте автор объясняет, что такое замыкания в Swift, как они работают и, самое главное, показывает различные примеры замыканий с возрастающей сложностью.
🧐 К концу этой заметки автор обещает объяснить всё, что необходимо знать для эффективного использования замыканий в приложении.
📖 Замыкания - это мощная концепция, которая позволяет использовать множество различных шаблонов программирования.
Однако для многих начинающих программистов closures могут быть сложными в понимании и дальнейшем использовании.
Это особенно верно, когда замыкания используются в асинхронном контексте.
Например, когда они используются в качестве completion handlers или передаются в приложении, чтобы их можно было вызвать позже.
В своём посте автор объясняет, что такое замыкания в Swift, как они работают и, самое главное, показывает различные примеры замыканий с возрастающей сложностью.
🧐 К концу этой заметки автор обещает объяснить всё, что необходимо знать для эффективного использования замыканий в приложении.
👍7🤮1
Вариативные параметры
Вариативный параметр принимает ноль или более значений определенного типа. Он обозначается тремя последовательными точками, после типа данных параметра в декларации функции. Данный метод – хорошая альтернатива, когда для работы нам нужно только одно значение. Swift может конвертировать одно значение в набор переменных.
Вариативный параметр принимает ноль или более значений определенного типа. Он обозначается тремя последовательными точками, после типа данных параметра в декларации функции. Данный метод – хорошая альтернатива, когда для работы нам нужно только одно значение. Swift может конвертировать одно значение в набор переменных.
👍6👎3