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