본문 바로가기
프로그래밍 놀이터/Tips

[실용주의 프로그래머] 리소스 사용의 균형

by 돼지왕 왕돼지 2018. 10. 28.
반응형

[실용주의 프로그래머] 리소스 사용의 균형


DeadLock, [실용주의 프로그래머] 리소스 사용의 균형, 결자해지, 균형을 점검하기, 리소스를 할당한 순서의 반대로 해제하라, 시작한 것은 끝내라, 자원 상태 레퍼, 중첩 할당


-

시작한 것은 끝내라.


이것은 단순히 리소스를 할당하는 루틴이나 객체가 리소스를 해제하는 책임 역시 져야한다는 걸 의미한다.

이상적으로 말해서 리소스를 할당하는 루틴이 해제 역시 책임져야 한다는 것이다.





중첩 할당


-

리소스를 할당한 순서의 반대로 해제하라. 이렇게 해야 한 리소스가 다른 리소스를 참조하는 경우에도 리소스를 고아로 만들지 않는다.

코드의 여러 곳에서 동일한 리소스 집합을 할당하는 경우, 할당 순서를 언제나 같게 하라. deadlock 가능성이 줄어들 것이다.





객체와 예외





균형과 예외





리소스 사용의 균형을 잡을 수 없는 경우


-

기본적인 리소스 할당 방식이 아예 적절하지 않은 경우가 있다.

보통 동적 자료 구조형을 사용하는 프로그램에서 이런 일이 많이 생긴다.


집합적인 자료구조 안의 자료에 대해 책임을 지는 게 누구인지 정해놓아야 한다.

아래 세 가지 중 하나를 선택할 수 있다.


1. 최상위 구조 자신이 자기 안에 들어있는 하위 구조들의 할당을 해제할 책임이 있다. 하위 구조들은 또 다시 재귀적으로 자기 안에 들어있는 자료들을 해제할 책임이 있고, 이런 식으로 진행된다.

2. 최상위 구조에서 그냥 할당이 해제된다. 그 안에서 참조하던 구조들은 모두 연결이 끊어져 고아가 된다.

3. 최상위 구조는 하나라도 하위 구조를 가지고 있을 경우 자기의 할당 해제를 거부한다.





균형을 점검하기


-

코드 속에서 프로그램 논리에 따르자면 자원들이 반드시 이런 상태에 있어야 한다고 말할 지점들이 있을 것이다.

래퍼들을 사용해서 정말 그런지 점검하라.




반응형

댓글