Вопрос
Подскажите, как (и откуда) горутина получает память для расширения ее стека?
11 комментов
· 29.05.2024
Когда горутине нужно расширить стек, она обращается к специальному сервису внутри ядра операционной системы под названием "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
ответить
коммент удалён
· 29.05.2024
хах, то есть мы обращаемся к серверам гугл всякий раз, когда нужно расширить память?)) сами то поняли, что написали? ))
0
ответить
ответ удалён
· 29.05.2024
Можете ознакомиться с этим в исходниках Go
0
ответить
ответ удалён
· 29.05.2024
ссылочку не пришлете, пожалуйста, на тот момент, где говорится про суперкомпьютер гугла?)
0
ответить
ответ удалён
· 09.06.2024
Это не гпт писал? :D
0
ответить
ответ удалён
· 21.06.2024
Хахах, сделал мой день)
0
ответить
ответ удалён
· 21.06.2024
Если запустить код на Go без интернета, в какую серверную комнату полетит запрос на расширение стека?))
0
ответить
ответ удалён
· 21.06.2024
тогда из головы программиста память заберет 😁
0
ответить
ответ удалён
· 29.05.2024
если подходит к лимиту стека, то рантайм выделяет память дальше , если это невозможно то выделяется новый кусок памяти и туда переноситься стек
0
ответить
коммент удалён
· 29.05.2024
«рантайм выделяет» - откуда? к ядру ходит? вот это непонятно.
0
ответить
ответ удалён
· 08.06.2024
Если ещё сам не нашел ответ, то глянь тут https://habr.com/ru/companies/ruvds/articles/442648/
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён