Что такое многопоточность (multithreading)

«Что такое многопоточность (multithreading)» — вопрос из категории Linux, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Многопоточность — это способ выполнения нескольких потоков (threads) внутри одного процесса параллельно или псевдопараллельно. Потоки разделяют общую память процесса, что упрощает обмен данными, но требует синхронизации для избежания гонок (race conditions).

В Go вместо классических потоков используются горутины (goroutines) — легковесные потоки, управляемые рантаймом. Они экономят ресурсы и масштабируются лучше системных потоков.

Пример:

package main

import (
    "fmt"
    "time"
)

func printNumbers() {
    for i := 1; i <= 5; i++ {
        time.Sleep(100 * time.Millisecond)
        fmt.Println(i)
    }
}

func main() {
    go printNumbers() // запуск горутины
    go printNumbers() // ещё одна горутина
    time.Sleep(1 * time.Second) // ожидание завершения
}

Ключевые отличия горутин от потоков:

  • Запуск тысяч горутин без значительных накладных расходов
  • Кооперативная многозадачность (не вытесняющая)
  • Каналы (channels) для безопасной коммуникации

Видео-ответы