Re[4]: Горутины и потоки
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 28.06.21 13:28
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>В основном потому что ОС не знает чем будет заниматься поток и делает многое "по умолчанию".

T>>А каких именно знаний о потоке не хватает OS?
G>ОС не знает когда поток остановится и остановится ли вообще.

Ну кроме случаев, когда нить сама делает вызов, который блокирует её выполнение )
а таких действий в сетевой нагрузке и GUI, например, большинство.

G> ОС прерывает выполнение по кванту времени, поэтому нужно сохвранить все текуще состояние (стек).


При любом прерывании выполнения надо сохранить текущее состояние.

G> В "упавлемых" средах "поток" выполнения останавливается не тогда когда ОС решит, а тогда когда код дойдет до точки прерывания.


И как определяется точка прерывания?
В Go это точно так же как в случае ОС — переход в ожидание, или просто вызов чего-то в рантайме. Пустой вечный цикл в Go заблокирует целиком одну системную нить рантайма.
В Erlang не так — там рантайм считает "редукции", но за это платится тратой процессора.

G> В этой точке рантайм знает о текущем состоянии "потока", которое обычно в разы меньше чем весь стек.


Оно ровно равно тут всему стеку плюс регистры (а не пространству, зарезервированному под стек).
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.