В документации Golang как-то неясно раскрывается суть goroutines. Скажите, goroutines - это ничто иное как потоки операционной системы? (т.е. как я пониманию, компилятор Go сам заботится о внутренней реализации этих потоков в зависимости от операционной системы)
3 Answers
по простому - это более высокоуровневые потоки. К примеру, если нужно выполнять очень мелкие действия в отдельных потоках, то обычные потоки будут накладными - система будет дольше их создавать. для goroutines run-time может переиспользовать один и тот же поток, эмулируя работу настоящих потоков. В результате получается быстро и дешево. Проблема номер два - некоторые процессы могут создавать очень большое количество потоков (например, из за ошибки программиста). goroutines такого не должно случиться - они будут прост в очереди.
Можно считать, что goroutines - это такой встроенный в язык thread pool.
- 112,121
- 6
- 94
- 160
Если бы это была бы просто параллельность средствами операционной системы, то не следовало бы и язык городить. Другие языки для этих целей прекрасно обходятся библиотеками.
ГоРутины - это сильно кастрированные потоки, если сравнивать их с теми, что предоставляет нам операционная система, нет особых гарантий параллельности, некоторые особо рьяно работающие ГоРутины могут заблокировать своей активностью другие ГоРутины.
Но при этом, как верно заметили выше, они очень не накладны и на этапе разработки программы и на этапе выполнения программы.
Наиболее близкий аналог - green threads
- 599
Наиболее близкий аналог - green threads
Да вот не похоже что так. green threads 100%-блокируется на i/o
- 1
-
-
Постарайтесь писать более развернутые ответы. Поясните, на чем основано ваше утверждение? – Nicolas Chabanovsky Aug 10 '15 at 15:03
В случае Go я думаю, что он создает несколько потоков, по которым раскидывает goroutines. Но может и не создавать. Например, если это горутина, которая просто складывает два числа.
– KoVadim Jun 21 '13 at 19:14