정확히 언제 사용 하는건지 모르겠습니다...
[질문] runtime 패키지의 KeepAlive와 SetFinalizer 질문
듕귁듕귁(125.138)
2022-06-03 21:18
추천 0
댓글 5
다른 게시글
-
혹시 이런경우는 json 파싱 어케함? [3][질문] 익명(61.101) | 22.06.02추천 0
-
텍스트를 yaml 이나 json 파일로 변경할수 있나요? [1][질문] 익명(hipasstraffic) | 22.06.01추천 0
-
에디터 추천좀 [1][일반] 익명(124.54) | 22.05.26추천 0
-
go채널 close를 언제 해야될지 모르겠셈 [1][질문] 익명(118.219) | 22.05.25추천 0
-
go로 채팅어플 백엔드만드려는데 어케생각함 [2][질문] 라이차차(126.194) | 22.05.22추천 0
-
함수 앞에 go 붙이면 고루틴 되는거임? [1][질문] 익명(118.219) | 22.05.22추천 1
-
이미지 검색을 이용한 업스케일러 만듬 [4][일반] 익명(39.7) | 22.05.21추천 2
-
if err != nil 이거 계속 써야 하냐 [4][일반] 익명(211.248) | 22.05.19추천 1
-
이거 뭔지 아시는 형님 계십니까 [2][질문] 익명(125.131) | 22.05.15추천 0
-
go-astilectron 써보신 형님 계십니까 [4][질문] abc(115.140) | 22.05.14추천 0
https://forum.golangbridge.org/t/curious-about-runtime-keepalive-usage/3530/4
https://dev.to/freakynit/the-very-useful-runtime-package-in-golang-5b16
잘은
모르겠는데 파일 제어할 때 쓰는가 보네영 ㅇㅂㅇ 저능 파일을 그렇게까지 무겁게 다루질 않아서 헤헿ㅇㅂㅇ
KeepAlive는 말 그대로 가비지 컬렉터가 수집을 하지 않도록 현재 사용중이라고 명시하는 것이고, SetFinalizer는 Destructor랑 비슷하게 가비지 컬렉팅되어 삭제될 때 실행될 함수를 지정해 주는 겁니다. 그렇다고 Finalizer를 Destructor처럼 쓰면 큰일나는 것이, 가비지 컬렉팅되었다고 해서 바로 실행되는 게 아니고, 심지어 프로그램이 종료되기 전까지 실행되지 않을 수도 있습니다. 사실 runtime 패키지의 대부분의 함수들은 흑마법을 부리거나(reflect 등) 로우 레벨을 건드릴 게 아니라면(syscall 등) 쓸 일이 없다고 보시면 됩니다
답변해주신 내용덕에 SetFinallizer는 이해가 갔는데 os패키지의 File 함수들 보면 Read던 뭐던 마지막엔 KeepAlive를 호출하던데 살펴보면 참조를 계속 하고 있는걸로 보이는데 그럼 GC에 의해서 수거 대상이 아니지 않나요? 어떤 의미로 호출하는지 알 수 있을까요?
Go의 내부 구현을 말씀하시는 건가요? 대부분 File IO 관련 syscall은 File Descriptor를 통해 이루어지는데, 이건 그냥 int라서 카피를 통해 작동합니다. 따라서, syscall이 이루어지는 동안 별도의 고루틴으로 돌고 있는 GC가 File 구조체를 수거하는 걸 막기 위해 존재할겁니다
감사인사가 늦었습니다! 설명 감사합니다!