В учебниках и документации, которые я прочитал, все говорят, что goroutines - это «не совсем потоки» или «легкие потоки», но обычно их можно рассматривать как их собственный отдельный поток.Что такое goroutines?
Итак ... Что они на самом деле?
В учебниках и документации, которые я прочитал, все говорят, что goroutines - это «не совсем потоки» или «легкие потоки», но обычно их можно рассматривать как их собственный отдельный поток.Что такое goroutines?
Итак ... Что они на самом деле?
При наличии двух процессоров goroutine (s) работает как реальные потоки. При наличии единого процессора goroutine (s) выполняется как совместная процедура одного потока, который работает с переключением их контекстов. goroutine не прикрепляет фиксированную нить. Таким образом, это не идентификатор типа thread-id. Если вы хотите вставить goroutine в качестве потока ОС, вам нужно использовать runtime.LockOSThread()
.
Несколько вещей отличают goroutines от типичных потоков ОС:
go
, есть channel types и операции и select
statements для координации горутов.for{}
никогда не будет отключена).Они тесно связаны с большим количеством других терминов:
This Morsing's blog post about the Go scheduler приятно, потому что у него есть изображения с треугольниками, квадратами и кругами.
С точки зрения планировщика зрения:
goroutine включает в стек, указатель команд и другую информацию, важную для планирования.
Прочтите реализацию? –
Где я могу найти реализацию по встроенным ключевым словам? –
http://dave.cheney.net/2014/06/07/five-things-that-make-go-fast может помочь. – VonC