COW (Copy On Write)

JG Ahn·2024년 12월 13일

swift 심화

목록 보기
16/18

전에 간략하게 보고 지나갔던 내용이지만 Copy On Write에 대한 강의를 듣게되어 좀 더 자세히 내용정리를 하게되었다.


Copy On Write란?

값이 변경되는 시점에 복사가 되는 것을 의미한다.

예를 들면, 원본 A가 있고 B가 A를 복사했다.

이때는 B가 A의 주소값을 참조하고 있는 상태이다.
하지만, A의 값이나 B의 값 중 하나라도 변경이 일어나면 A의 주소값을 참조하던 B에 실제로 복사가 일어난다.

그렇다면 왜 사용할까?

굳이 복사를 늦추는 이유는 "성능"을 위해서이다.

swift에서는 Value Type이 깊은 복사를 사용한다.

깊은 복사는 원본값을 그대로 복사해 새로운 메모리 공간을 차지하게 되며 매번 깊은 복사를 사용하게되면 메모리 공간의 효율이 좋지 않을것이다.

이를 방지하기 위해 Colletion Type, String에서 Copy On Write가 사용된다.

Heap 메모리 영역은 가변적인 데이터 타입들이 저장되는 공간이기 때문에 Collection타입과 String같은 타입들에 의해 많이 사용된다. 그와 동시에 Heap 영역은 모든 쓰레드가 접근 가능한 영역이기 때문에 동시에 여러 쓰레드가 힙에 접근하게 되면 계산에 오류가 생기게 된다.

이를 방지하기 위해 접근에 대한 순서 처리가 필요하기 때문에 이 처리에 대한 비용이 들게 되는데 이러한 비용을 줄여주는 역할을 Copy On Wirte가 해주는 것이다.

Data Race (데이터 경쟁)

메모리 접근 문제에 대한 비슷한 문제로는 데이터 경쟁이 있다. 멀티 쓰레드 환경에서 일어나는 오류이며, 여러 쓰레드가 동시에 메모리에 접근할 때 일어나는 경쟁 상황을 의미한다.

데이터 경쟁을 막기위한 방법은 병행제어를 사용하는데 해당 내용은 깊이 들어가야 하기에 다음에 정리를 하도록 해야겠다😮‍💨


Copy On Write 예시

0개의 댓글