Skip to content

Конкурентная модель

В этой теме мы рассмотрим объединение механики и семантики планировщиков ОС и Go для обеспечения более глубокого понимания того, что является параллелизмом, а что нет.

Что такое конкурентная модель

Конкурентность означает выполнение «не по порядку». Взять набор инструкций, которые в противном случае выполнялись бы последовательно, и найти способ выполнять их не по порядку, чтобы получить тот же результат. Для стоящей перед тобой задачи должно быть очевидно, что выполнение не по порядку принесет дополнительную пользу. Когда говорится ценность, имеется в виду увеличение производительности за счет сложности. В зависимости от вашей задачи выполнение не по порядку может быть невозможным или даже не иметь смысла.

Также важно понимать, что конкурентность— это не то же самое, что параллелизм. Параллелизм означает выполнение двух или более инструкций одновременно. Это концепция, отличная от конкурентной модели. Параллелизм возможен только тогда, когда у тебя есть по крайней мере две доступных операционных системы (ОС) два и аппаратных потока, а также по крайней мере две Горутины, каждая из которых выполняет инструкции независимо в каждом ОС/аппаратном потоке.

На изображении выше мы видим схему конкурентности и параллелизма двух логических процессоров (P), каждый из которых имеет свой независимый поток ОС (M), присоединенный к независимому аппаратному потоку (Core) на машине. Ты можешь видеть, что две горутины (G1 и G2) выполняются параллельно, одновременно выполняя свои инструкции в соответствующем потоке ОС/оборудования. В каждом логическом процессоре три горутины по очереди делят свой соответствующий поток ОС. Все эти горутины работают одновременно, выполняя свои инструкции в произвольном порядке и разделяя время в потоке ОС.

Вот в чем загвоздка: иногда использование конкурентной модели без параллелизма может фактически снизить производительность. Любопытно, что иногда использование конкурентности с параллелизмом не дает большего прироста производительности, чем ты мог бы ожидать.

О разнице между конкурентностью и параллелизмом ты можешь узнать по ссылке.