История изменений
Исправление lbvf50txt, (текущая версия) :
Короутины по ядрам пускать умеют чуть менее чем все. Го тут был далеко не первым. Вон даже в Яву завезли их из коробки.
Не путайте две сущности OS Thread и Goroutine. Обе сущности для упрощения называют потоками, чтоб не читать 3х часовую лекцию и не проводить еще 2х часовую практику. ОS Thread - это часть услуг OS и ее умеют все языки, а вот Goroutine это именно разработка команды Go и она революционна для 2009 года.
Goroutine - имеет примерно такое же отноешие к OS Thread, как OS Thread имеет к OS Process. Когда Тред зависает ожидая IO операцию, или Goroutine зависает ожидая netpoll, работа Go програмы продолжается, потому что горутины склеены с тредами через прослойку вирутальный процесессоров. И вся эта схема называется M:N Multitasking, и еще точней G/P/M где M - Machine Thread.
Если заблокировался OS Thread - тогда Go Runtime просто переклеит вируальный процессор на другой OS Thread.
Если Goroutine ожидает ответа по сети - то ее просто припаркуют в очередь, а на ее место позовут выполняться другую Goroutine.
Вывод:
Горутина - это не Тред. Горутина - это сущность которая может переключаться между Тредами. И это и есть главное в Golang.
Суть Golang которая сделал его по настоящему привлекательным и отличающимся от множества других языков в 2009 году был как раз механизм позволяющий уменьшить простаивание процессора при IO-bound задачах. Когда у вас ни Thread не замораживается так как алгортим ждет ответа от netpoll, и алгоритм не зависает так как Thread приостановлен для получения IO ответа.
P.S.
Извините, для меня Go - это настольная игра с 1000 летней историей, о которой мы беседовали в университете гуляя по аллеям. А язык программирования Golang, где его сокращенное имя является красивой игрой слов Go, Google, Go.
Исходная версия lbvf50txt, :
Короутины по ядрам пускать умеют чуть менее чем все. Го тут был далеко не первым. Вон даже в Яву завезли их из коробки.
Не путайте две сущности OS Thread и Goroutine. Обе сущности для упрощения называют потоками, чтоб не читать 3х часовую лекцию и не проводить еще 2х часовую практику. ОS Thread - это часть услуг OS и ее умеют все языки, а вот Goroutine это именно разработка команды Go и она революционна для 2009 года.
Goroutine - имеет примерно такое же отноешие к OS Thread, как OS Thread имеет к OS Process. Когда Тред зависает ожидая IO операцию, или Goroutine зависает ожидая netpoll, работа Go програмы продолжается, потому что горутины склеены с тредами через прослойку вирутальный процесессоров. И вся эта схема называется M:N Multitasking, и еще точней G/P/M где M - Machine Thread.
Если заблокировался OS Thread - тогда Go Runtime просто переклеит вируальный процессор на другой OS Thread.
Если Goroutine ожидает ответа по сети - то ее просто припаркуют в очередь, а на ее место позовут выполняться другую Goroutine.
Вывод:
Горудита это не Тред. Горутина это сущность которая может переключаться между Тредами. И это и есть главное в Golang.
Суть Golang которая сделал его по настоящему привлекательным и отличающимся от множества других языков в 2009 году был как раз механизм позволяющий уменьшить простаивание процессора при IO-bound задачах. Когда у вас ни Thread не замораживается так как алгортим ждет ответа от netpoll, и алгоритм не зависает так как Thread приостановлен для получения IO ответа.
P.S.
Извините, для меня Go - это настольная игра с 1000 летней историей, о которой мы беседовали в университете гуляя по аллеям. А язык программирования Golang, где его сокращенное имя является красивой игрой слов Go, Google, Go.