Sobes.tech
Назад к вопросам
Senior
7

Расскажите о моделях параллелизма — что такое shared memory и message passing, мьютексы и атомики

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Модели параллелизма описывают способы организации и управления параллельным выполнением кода.

Shared Memory (Общая память) — несколько потоков или процессов работают с одной и той же областью памяти. Для предотвращения конфликтов и гонок данных применяются механизмы синхронизации:

  • Мьютексы (Mutex) — примитивы, обеспечивающие эксклюзивный доступ к ресурсу. Только один поток может захватить мьютекс, остальные ждут освобождения.
  • Атомарные операции (Atomics) — операции, которые выполняются как неделимые, без прерывания. Позволяют безопасно изменять переменные без блокировок, например, инкремент счетчика.

Message Passing (Обмен сообщениями) — параллельные сущности (процессы, горутины) обмениваются данными через сообщения, а не через общую память. Это снижает риски гонок и упрощает синхронизацию. В Go это реализовано через каналы (channels), которые обеспечивают безопасную передачу данных между горутинами.

Пример в Go:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    defer mu.Unlock()
    counter++
}

// Использование канала для message passing
ch := make(chan int)
go func() {
    ch <- 42
}()
val := <-ch

Таким образом, shared memory требует явной синхронизации (мьютексы, атомики), а message passing строится на безопасной передаче данных через сообщения.