❓ Какие основные отличия горутины от потока
➡️ Поток создаёт и планирует операционная система через своё ядро. Горутиной управляет рантайм Go. Его планировщик работает в пользовательском пространстве и не дёргает ядро на каждое переключение.
➡️ Поток получает фиксированный стек, обычно от 1 до 8 МБ. Горутина стартует со стеком примерно в 2 КБ, и этот стек растёт и сжимается по мере надобности. Поэтому горутин можно держать сотни тысяч, а потоков столько вы не создадите.
➡️ Создание потока дорогое, оно идёт через системный вызов. Горутина создаётся дёшево, это по сути структура в памяти рантайма. Отсюда и разница в количестве.
➡️ Переключение потоков делает ядро, это полноценный контекстный свич с заметными затратами. Переключение горутин происходит в пользовательском пространстве и стоит дешевле.
➡️ Потоки чаще общаются через разделяемую память и примитивы синхронизации вроде мьютексов. В Go принят другой подход, общение через каналы. Формулируют это так, не разделяйте память ради общения, общайтесь, чтобы разделять данные.
🐸 Библиотека Go для собеса
Post #1419
1.41K
- 👍 4
- ❤ 1
- 🥱 1