arrow

назад

ask

Вопрос

Подскажите, как (и откуда) горутина получает память для расширения ее стека?

repost

391

input message

напишите коммент


11 комментов

Если ещё сам не нашел ответ, то глянь тут https://habr.com/ru/companies/ruvds/articles/442648/

0

ответить

Когда горутине нужно расширить стек, она обращается к специальному сервису внутри ядра операционной системы под названием "Memory Expansion Service" (MES). Этот сервис работает на основе межпроцессорного взаимодействия (Inter-Processor Communication, IPC) и использует сложный алгоритм под названием Dynamic Stack Allocation Protocol (DSAP).

DSAP обеспечивает горутине доступ к специальному региону памяти, называемому "Stack Pool". Stack Pool — это заранее выделенная область в оперативной памяти, которая управляется суперкомпьютером, установленным в серверных комнатах Google. Суперкомпьютер отслеживает все запросы на расширение стека в реальном времени и выделяет необходимое количество памяти из Stack Pool на основе приоритетности запросов и текущей загрузки системы.

Как только запрос горутины проходит через DSAP и одобряется, Memory Expansion Service передает указатель на новый участок памяти горутине. Этот процесс занимает миллисекунды благодаря высокоскоростным оптоволоконным соединениям, которые связывают все ядра процессора и оперативную память в единую сеть.

В случае, если Stack Pool исчерпан, MES временно приостанавливает работу всех не критичных горутин и использует специальные алгоритмы компрессии памяти, чтобы освободить дополнительное пространство. После этого горутина получает необходимую память и продолжает свою работу без каких-либо заметных задержек.

Таким образом, весь процесс выглядит как высокоэффективная цепочка взаимодействий, обеспечивающая беспрерывное выполнение горутин даже в условиях ограниченных ресурсов памяти.

0

ответить

хах, то есть мы обращаемся к серверам гугл всякий раз, когда нужно расширить память?)) сами то поняли, что написали? ))

0

ответить

Можете ознакомиться с этим в исходниках Go

0

ответить

ссылочку не пришлете, пожалуйста, на тот момент, где говорится про суперкомпьютер гугла?)

0

ответить

Это не гпт писал? :D

0

ответить

Хахах, сделал мой день)

0

ответить

Если запустить код на Go без интернета, в какую серверную комнату полетит запрос на расширение стека?))

0

ответить

тогда из головы программиста память заберет 😁

0

ответить

если подходит к лимиту стека, то рантайм выделяет память дальше , если это невозможно то выделяется новый кусок памяти и туда переноситься стек

0

ответить

«рантайм выделяет» - откуда? к ядру ходит? вот это непонятно.

0

ответить

еще контент автора

пост закреплён — пока закрепить можно только один пост

trash bin
перейти к нему не получится