• Что есть что в многопоточности?

    yakovmanshin
    @yakovmanshin
    Software Engineer
    Поток — это цепочка задач (блоков кода), которые выполняются компьютером. Потоки нужны, чтобы более эффективно использовать многоядерные процессоры: каждое ядро может выполнять отдельный поток без перерывов (тайм-шейринга). Потоки на платформах Apple примерно соответствуют традиционному пониманию потоков.

    У потоков есть недостаток: на их создание тратятся вычислительные ресурсы. Если для каждой мелкой операции (например, сделать запрос в сеть и получить ответ) создавать отдельный поток, это будет медленно и неэффективно.

    Очередь (DispatchQueue) — это абстракция из фреймворка GCD (Grand Central Dispatch). Ее придумали для того, чтобы обходить проблему с частым созданием потоков. Внутри очереди есть точно такие же задачи (блоки кода), но при этом создание очереди — менее «дорогой» процесс, чем создание потока.

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

    На картинке показаны две очереди. Стрелки, идущие от верхней к нижней, демонстрируют добавление асинхронных блоков кода в нижнюю очередь (асинхронных — потому что верхняя очередь не ждет, пока нижняя выполнит задачу, а идет дальше).
    Ответ написан
    1 комментарий