Sobes.tech
Back to questions
Middle+
1

В чём разница между процессами, потоками и горутинами в Go?

Companies where asked
Ozon ФинтехOzon Финтех

Answer from AI

sobes.tech AI

Процессы — это изолированные экземпляры программ с собственным адресным пространством и ресурсами операционной системы. Они работают независимо и взаимодействуют через межпроцессное взаимодействие (IPC).

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

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

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

  • Горутин гораздо легче по ресурсам, чем системные потоки.
  • Планирование горутин происходит в пространстве пользователя (user-space scheduler), а не ОС.
  • Горутин можно создавать и переключать очень быстро.

Пример создания горутины:

go func() {
    fmt.Println("Hello from goroutine")
}()

Таким образом, процессы — это изолированные программы, потоки — системные единицы выполнения внутри процесса, а горутины — легковесные конкурентные функции, управляемые Go-рантаймом.