Thread
Process
운영체제로부터 자원을 할당받은 작업의 단위. 프로그램을 수행하는데 필요한 데이터, 메모리, 자원, thread로 구성되어 있다. 운영체제 관점에서는 프로세스가 최소 작업단위이다. (스레드는 CPU 입장에서 최소 작업단위이다)
안정성을 위해 운영체제는 프로세스가 자신에게 할당된 메모리내의 정보만 접근할 수 있도록 강제하지만, 컴퓨터 프로세스간 통신 프로세스인 IPC(Inter-Process Communication)를 사용하면 프로세스간 정보를 주고 받는 것이 가능하다.
Thread
프로세서의 자원을 이용하여 실제로 작업을 수행하는 주체이기 때문에 모든 프로세스는 하나 이상의 Thread를 가지고, 두개 이상의 thread를 가진 프로세스를 multi-thread 프로세스라고 한다. 과거에는 프로그램을 실행할 때 실행 시작부터 끝까지 프로세스 하나만을 사용하였는데, 시간이 흐를 수록 프로그램이 복잡해지고 프로세스 하나만을 사용해서 프로그램을 실행하기 벅찬 상황이 왔다. 한 프로그램을 처리하기위해서 프로세스를 여러개 만들면되지 않을까라는 생각에서 출발하였는데, 운영체제는 안전성을 위해서 프로세스마다 자신에게 할당된 메모리 내의 정보에만 접근할 수 있기 때문에 프로세스보다 더 작은 실행단위의 계념이 필요하게 되었고 그것이 스레드이다.
프로세스가 할당받은 메모리영역 내에서 Stack 형식으로 할당된 메모리영역은 따로 할당받고, 나머지 Code/Data/Heap 형식으로 할당된 메모리 영역을 공유한다. 따라서 각각의 쓰레드는 별도의 스택을 가지고 있지만 힙 메모리는 서로 읽고 쓸 수 있게 된다. 이런 공유하는 특징 때문에 한 스레드에서 오류가 발생하면 동일 프로세스내에 다른 스레드가 모두 종료되게 된다. (프로세스 끼리는 독립적이여서, 프로세스1개가 오류가나서 종료되어도 다른 프로세스에는 영향을 미치지 않는다.)
multi-threading
하나의 프로세스내에서 여러 쓰레드가 동시에 작업을 한다. 실제로 한개의 CPU가 한번에 단 한가지 작업만 할 수 있기 때문에 아주 짧은 시간 동안 여러 작업을 번갈아 가며 수행함으로써 동시에 여러 작업이 수행되는것처럼 보이는것. ex ) 채팅을 하면서 파일을 다운받는 메신저 멀티쓰레딩의 장점은 CPU 사용율을 향상시킨다. 자원을 보다 효율적으로 사용할 수 있다. 사용자에 대한 응답성이 향상된다. 멀티쓰레드 단점 여러 쓰레드가 같은 프로세스 내에서 자원을 공유하면서 작업 하기때문에 생길 수 있는 동기화 교착상태를 고려한 프로그래밍이 필요하다. 이런 멀티쓰레드 환경에서도 잘 작동하는 것을 thread safe하다고 한다.
참고 자료
https://velog.io/@hyun0310woo/9.-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98-%EB%8C%80%ED%99%94
https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://dublin-java.tistory.com/8