스레드란?
Light Weight Process라고도 하며 프로세스 내에서 실제로 작업을 수행하는 주체를 뜻합니다. 두 개 이상의 스레드를 가지면 멀티스레드 프로세스가 됩니다. 프로세스 간에는 각 프로세스의 데이터 접근이 불가능하여 IPC 등을 사용하지만, 하나의 프로세스 안에 여러 개의 스레드는 동시에 실행이 가능하며 프로세스의 데이터에 모두 접근이 가능합니다.
또한, 프로세스 안의 stack은 스레드 별로 공간이 나뉘어져 있습니다.
스레드의 장점
- 사용자에 대한 응답성 향상 (하나는 다른 작업, 하나는 커뮤니케이션 하면 되니까)
- 자원 공유 효율(프로세스 안에서 프로세스 데이터 접근이 모두 가능하여 IPC보다 효율적)
- 작업이 분리되어 코드가 간결
스레드의 단점
- 스레드 중 한 스레드만 문제가 있어도 해당 프로세스의 모든 스레드 멈춤
- 스레드를 많이 생성하면 context switching이 많이 일어나 성능 저하
- 동기화 이슈
동기화 이슈
여러 스레드가 동일한 자원에 접근 시 동기화 이슈가 발생할 수 있습니다.
ex) 동일 자원을 여러 스레드가 동시에 수정할 경우, 각 스레드 결과에 영향을 줌.
프로세스와 스레드
- 프로세스는 독립적, 스레드는 프로세스의 서브셋
- 프로세스는 각각 독립적인 자원을 가짐, 스레드는 프로세스 자원 공유
- 프로세스는 자신만의 주소영역을 가짐, 스레드는 주소영역 공유
- 프로세스 간에는 IPC 기법으로 통신. 스레드는 필요 없음