Concurrency vs. Parallelism

вторник, 15 февраля 2011, Роман Калита

yue_xiaoying_48

Если углубляться в тему многопоточности то существует два понятия: Concurrency и Parallelism.

Раньше когда большинство компьютеров содержали одно ядро и одно CPU вопрос в разнице не стоял. Теперь же литература пестрит этими двумя понятиями. Какая же между ними разница?

Concurrency – это программирование с несколькими действиями одновременно (например одновременное обращение к серверу за данными и при этом работа с клиентским приложением без подвисаний). Этот английский термин больше подходит к русскому аналогу многопоточность или асинхронное выполнение операций.

Concurrency – это когда две задачи запускаются, исполняются и завершаются в пересекающиеся промежутки времени, но это не означает что они будут выполнятся одновременно, пример – многопоточность на одноядерном CPU.

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

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

Parallelism – это программирование с использованием нескольких потоков когда ожидается что потоки выполняются одновременно на разных процессорах или ядрах процессора. В отдельно взятые момент времени выполняется несколько потоков и задач, также они могут стартовать на выполнение и завершатся одновременно. В отличие от Concurrency основная цель Parallelism – это пропускная способность, в отличие от Concurrency, где целью стоит отзывчивость приложения.

Теперь русские аналоги этих понятий. Обычный словарь тут не поможет. Наиболее близкие понятие к Concurrency – это многопоточность или асинхронное выполнение операций, в отличие от Parallelism – где близкий аналог параллелизм, потому что задачи выполняются параллельно.

После того как все это написал нагуглил обсуждение на stackoverflow.com. Там привели отличные илюстрации.

Concurrency

Выполняется одна задача и происходит переключение контекста

concurrency

Parallelism

Выполняются несколько задач одновременно

parallelism

Так что Concurrency и Parallelism – не одно и то же, точно также как и многопоточность и параллелизм.


Ищите нас в интернетах!

Комментарии

Свежие вакансии