GO_INTERVIEW_LIB Telegram 583
💬 В Go есть функция runtime.SetFinalizer, позволяющая привязать финализатор к объекту. Как она работает и в каких случаях использование финализаторов может быть небезопасным? Приведите пример ситуации, в которой финализатор может не сработать.

runtime.SetFinalizer позволяет привязать функцию (финализатор) к объекту, которая будет выполнена, когда сборщик мусора сочтёт объект неиспользуемым. Финализатор запускается сборщиком мусора, но его выполнение зависит от цикла GC, поэтому точное время выполнения не гарантируется.

Использование финализаторов может быть небезопасным из-за нескольких факторов:
1. Финализаторы могут сработать не сразу после того, как объект станет неиспользуемым, а в зависимости от цикла GC.
2. Tiny objects: объекты размером менее 16 байт и без указателей (так называемые "tiny objects") могут группироваться вместе, и если хотя бы один объект в группе ещё используется, финализаторы для остальных объектов могут не сработать.
3. Ограничение на привязку к началу блока памяти: финализатор можно установить только для указателя, указывающего на начало блока памяти объекта. Если привязать финализатор к внутреннему полю структуры, программа завершится с ошибкой.

В следующем примере FourBytes является "tiny object", и финализатор может не сработать, если другие объекты из этой же группы продолжают использоваться:

type FourBytes struct {
A byte; B byte; C byte; D byte
}

func final() {
a := &FourBytes{}
runtime.SetFinalizer(a, func(a *FourBytes) {
fmt.Println("Финализатор FourBytes вызван")
})
}

func main() {
final()
runtime.GC()
time.Sleep(time.Millisecond)
}


В этом коде финализатор может либо сработать, либо нет, в зависимости от того, как Go управляет группой маленьких объектов. Это делает использование финализаторов в Go непредсказуемым, и в большинстве случаев рекомендуется использовать явное освобождение ресурсов с методами, такими как Close или Dispose.
👍8🤔1



tgoop.com/go_interview_lib/583
Create:
Last Update:

💬 В Go есть функция runtime.SetFinalizer, позволяющая привязать финализатор к объекту. Как она работает и в каких случаях использование финализаторов может быть небезопасным? Приведите пример ситуации, в которой финализатор может не сработать.

runtime.SetFinalizer позволяет привязать функцию (финализатор) к объекту, которая будет выполнена, когда сборщик мусора сочтёт объект неиспользуемым. Финализатор запускается сборщиком мусора, но его выполнение зависит от цикла GC, поэтому точное время выполнения не гарантируется.

Использование финализаторов может быть небезопасным из-за нескольких факторов:
1. Финализаторы могут сработать не сразу после того, как объект станет неиспользуемым, а в зависимости от цикла GC.
2. Tiny objects: объекты размером менее 16 байт и без указателей (так называемые "tiny objects") могут группироваться вместе, и если хотя бы один объект в группе ещё используется, финализаторы для остальных объектов могут не сработать.
3. Ограничение на привязку к началу блока памяти: финализатор можно установить только для указателя, указывающего на начало блока памяти объекта. Если привязать финализатор к внутреннему полю структуры, программа завершится с ошибкой.

В следующем примере FourBytes является "tiny object", и финализатор может не сработать, если другие объекты из этой же группы продолжают использоваться:

type FourBytes struct {
A byte; B byte; C byte; D byte
}

func final() {
a := &FourBytes{}
runtime.SetFinalizer(a, func(a *FourBytes) {
fmt.Println("Финализатор FourBytes вызван")
})
}

func main() {
final()
runtime.GC()
time.Sleep(time.Millisecond)
}


В этом коде финализатор может либо сработать, либо нет, в зависимости от того, как Go управляет группой маленьких объектов. Это делает использование финализаторов в Go непредсказуемым, и в большинстве случаев рекомендуется использовать явное освобождение ресурсов с методами, такими как Close или Dispose.

BY Библиотека Go для собеса | вопросы с собеседований


Share with your friend now:
tgoop.com/go_interview_lib/583

View MORE
Open in Telegram


Telegram News

Date: |

For crypto enthusiasts, there was the “gm” app, a self-described “meme app” which only allowed users to greet each other with “gm,” or “good morning,” a common acronym thrown around on Crypto Twitter and Discord. But the gm app was shut down back in September after a hacker reportedly gained access to user data. 4How to customize a Telegram channel? The creator of the channel becomes its administrator by default. If you need help managing your channel, you can add more administrators from your subscriber base. You can provide each admin with limited or full rights to manage the channel. For example, you can allow an administrator to publish and edit content while withholding the right to add new subscribers. But a Telegram statement also said: "Any requests related to political censorship or limiting human rights such as the rights to free speech or assembly are not and will not be considered." The optimal dimension of the avatar on Telegram is 512px by 512px, and it’s recommended to use PNG format to deliver an unpixelated avatar.
from us


Telegram Библиотека Go для собеса | вопросы с собеседований
FROM American