Задать вопрос
@beduin01

Правильно ли я понимаю как работают green threads?

Пытаюсь понять как работают зеленые нити. Как я понимаю их умеют не все языки. Из коробки они идут только в Go и D.

Как я это дело понял:
0. Гоурутины = фаеберы = зеленые нити
1. Внутри каждого процесса может выполняться множество нитей (чем это кстати ограничено?)
2. Фаеберы могут обмениваться данными через стек.
3. Чтобы можно было обмениваться данными через стек указатель на стек искусственно смещается выше чем нужно
4. Фаеберы могут перемещаться с одного нити на другую, если нить заблокирована

Я не нашел информации:

5. Какой максимальный размер стека в ОС?
6. может ли каждый процесс иметь свой стек?
  • Вопрос задан
  • 773 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Еще "зеленые нити" из коробки есть в scala и erlang. Ну и во многих функциональных языках типа haskel.

Максимальный размер стека обычно ограничен размером физической памяти. Если только не наложены ограничения, которое обычно можно изменить или убрать вообще. В линуксе начинать смотреть в файло /etc/security/limits.conf и на команду ulimit

Каждый процесс имеет свой стек! А нить, любая, делит стек со всеми нитями процесса.
Ответ написан
@asd111
5. Максимальный размер стека зависит от ОС. В Linux это обычно 8 Mb, но размер можно менять через ulimit -s и дальше размер. Можно ставить unlimited тогда размер стека будет ограничен размером свободной оперативной памяти. В windows не знаю как. Ещё размер стека можно указывать через флаги компилятора(по крайней мере в gcc).
Ответ написан
Комментировать
Foror
@Foror
Графоман
Вы не прояснили главного - зачем нужны грин треды. Иначе бы задали более интересный вопрос - Каким образом грин треды вытесняют друг-друга, когда происходит IO.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы