프로그램 내에서 두 개 이상의 동작을 동시에 실행
하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유
Context switching,동기화 등의 이유로 싱글 코어 멀티 스레딩은 스레드 생성 시간이 오히려 오버헤드로 작용해 단일 스레드 보다 느릴 수 있습니다.
공유자원을 서로 다른 스레드가 동시에 접근하는 경우,스레드 내에서는 Heep 영역을 공유하기 때문에 다른 스레드에서 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정 할 수 있습니다.
그래서 반드시 동기화 처리를 해야 합니다. 즉 동기화 비용이 발생합니다.
멀티 스레드 환경은 개발 난도가 높습니다. 또한 자원 사용량도 많습니다.
스레드의 메모리 영역
스택(Stack) 영역:스택은 각 스레드마다 독립적으로 할당됩니다. 즉, 스레드마다 고유한 스택 메모리 공간이 있으며, 이 스택에는 지역 변수와 메서드 호출 시의 인자들이 저장됩니다.
스택 메모리는 각 스레드가 독립적으로 사용하는 메모리이므로, 다른 스레드와 데이터를 공유하지 않습니다. 따라서 스택에 저장된 변수는 다른 스레드가 접근할 수 없고, 스레드 간의 간섭이 발생하지 않습니다.
힙(Heap) 영역:
힙은 모든 스레드가 공유하는 메모리 공간입니다. 객체나 배열과 같은 인스턴스 데이터는 힙 영역에 할당되며, 이 데이터는 모든 스레드가 접근할 수 있습니다.
힙 영역의 데이터는 공유 자원이 될 수 있으며, 여러 스레드가 동시에 접근할 수 있습니다. 이 경우, 스레드 간의 충돌(예: 엉뚱한 값을 읽어오거나 수정하는 문제)이 발생할 수 있습니다. 이를 방지하기 위해 동기화(Synchronization) 메커니즘이 필요합니다.
동기화 문제