Re[5]: Горутины и потоки
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 28.06.21 13:35
Оценка:
Здравствуйте, netch80, Вы писали:

G>>ОС не знает когда поток остановится и остановится ли вообще.

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

Если что планировщики ОС всгеда нормально справлялись с десктопной нагрузкой. необходимость обращатся с огромным количеством потоков есть только в сервреах.


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

N>При любом прерывании выполнения надо сохранить текущее состояние.
Только "контролируемое" прерывание потребует гораздо меньше места для сохраннеия, чем прерывание в произвольном месте.


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

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

N>Оно ровно равно тут всему стеку плюс регистры (а не пространству, зарезервированному под стек).

В C# можно в явном виде увидеть состояние "продожения" в async\await, оно сильно меньше чем весь стек + регистры.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.