Интересности      Книги      Утилиты    

24 августа 2016 г.

Concurrency vs. Parallelism

yue_xiaoying_48
Если углубляться в тему многопоточности то существует два понятия: Concurrency и Parallelism.
Раньше когда большинство компьютеров содержали одно ядро и одно CPU вопрос в разнице не стоял. Теперь же литература пестрит этими двумя понятиями. Какая же между ними разница?
Concurrency – это программирование с несколькими действиями одновременно (например одновременное обращение к серверу за данными и при этом работа с клиентским приложением без подвисаний). Этот английский термин больше подходит к русскому аналогу многопоточность или асинхронное выполнение операций.
Concurrency – это когда две задачи запускаются, исполняются и завершаются в пересекающиеся промежутки времени, но это не означает что они будут выполнятся одновременно, пример – многопоточность на одноядерном CPU.
Так как во время выполнения на одноядерном процессоре системой происходит переключение контекст то промежутки времени, когда две задачи выполняются могут пересекаться. Но они не стартуют и не завершаются одновременно, а также в один отдельно взятый момент времени выполняется только одна задача.
Concurrency или многопоточность больше понимается как свойство приложения, например отзывчивость во время выполнения фоновых или долгоиграющих операций.
Parallelism – это программирование с использованием нескольких потоков когда ожидается что потоки выполняются одновременно на разных процессорах или ядрах процессора. В отдельно взятые момент времени выполняется несколько потоков и задач, также они могут стартовать на выполнение и завершатся одновременно. В отличие от Concurrency основная цель Parallelism – это пропускная способность, в отличие от Concurrency, где целью стоит отзывчивость приложения.
Теперь русские аналоги этих понятий. Обычный словарь тут не поможет. Наиболее близкие понятие к Concurrency – это многопоточность или асинхронное выполнение операций, в отличие от Parallelism – где близкий аналог параллелизм, потому что задачи выполняются параллельно.
После того как все это написал нагуглил обсуждение на stackoverflow.com. Там привели отличные илюстрации.
Concurrency
Выполняется одна задача и происходит переключение контекста
concurrency
Parallelism
Выполняются несколько задач одновременно
parallelism
Так что Concurrency и Parallelism – не одно и то же, точно также как и многопоточность и параллелизм.

Комментариев нет:

Отправить комментарий