Страницы

Поиск по вопросам

воскресенье, 12 января 2020 г.

Goroutines - суть потоки?

#golang


В документации Golang как-то неясно раскрывается суть goroutines. Скажите, goroutines
-  это ничто иное как потоки операционной системы?
(т.е. как я пониманию, компилятор Go сам заботится о внутренней реализации этих потоков
в зависимости от операционной системы)    


Ответы

Ответ 1



по простому - это более высокоуровневые потоки. К примеру, если нужно выполнять очень мелкие действия в отдельных потоках, то обычные потоки будут накладными - система будет дольше их создавать. для goroutines run-time может переиспользовать один и тот же поток, эмулируя работу настоящих потоков. В результате получается быстро и дешево. Проблема номер два - некоторые процессы могут создавать очень большое количество потоков (например, из за ошибки программиста). goroutines такого не должно случиться - они будут прост в очереди. Можно считать, что goroutines - это такой встроенный в язык thread pool.

Ответ 2



Если бы это была бы просто параллельность средствами операционной системы, то не следовало бы и язык городить. Другие языки для этих целей прекрасно обходятся библиотеками. ГоРутины - это сильно кастрированные потоки, если сравнивать их с теми, что предоставляет нам операционная система, нет особых гарантий параллельности, некоторые особо рьяно работающие ГоРутины могут заблокировать своей активностью другие ГоРутины. Но при этом, как верно заметили выше, они очень не накладны и на этапе разработки программы и на этапе выполнения программы. Наиболее близкий аналог - green threads

Ответ 3



Наиболее близкий аналог - green threads Да вот не похоже что так. green threads 100%-блокируется на i/o

Комментариев нет:

Отправить комментарий