Struct는 멀티 스레드 환경에서도 thread-safety할 수 있을까?
2024. 6. 12. 09:10ㆍ숨참고 딥다이브
728x90
wwdc 2016 영상에서 class와 struct의 차이에 대해 알아보았다.
해당 영상에서는 다음과 같이 heap은 thread safety에 대한 오버헤드가 굉장히 크다.
그렇다면 struct는??
- 공식문서나 wwdc에서 struct의 thread-safety에서 따로 언급한 적은 없지만,
struct의 경우(참조타입을 포함하지 않는) 복사하더라도 value값이 복사되는 특성이 있기 때문에 같은 주소를 참조하는 클래스 타입에 비해서 동시에 같은 값을 참조하지 않기 때문에 thread-safety하다고 유추할 수 있다.
그렇다면 멀티 스레드 환경에서는 어떨까?
멀티 스레드 환경에서는 각 스레드들은 독립적인 `stack 메모리 영역`을 가지고 있다.
Swift에서는 값 타입은 복사되거나 함수의 매개변수로 전달될 때 스택에 저장된다.
-> 즉, 스레드는 동일한 struct를 참조하지 않고, 스레드 자신의 `스택 영역에 독립적인 복사본을 가진다.` 이로 인해 멀티 스레드 환경에서도 struct는 thread-safety할 수 있다.
728x90