Process


운영체제로부터 자원을 할당받은 작업의 단위. 프로그램을 수행하는데 필요한 데이터, 메모리, 자원, thread로 구성되어 있다. 운영체제 관점에서는 프로세스가 최소 작업단위이다. (스레드는 CPU 입장에서 최소 작업단위이다)

Thread_operating_system

안정성을 위해 운영체제는 프로세스가 자신에게 할당된 메모리내의 정보만 접근할 수 있도록 강제하지만, 컴퓨터 프로세스간 통신 프로세스인 IPC(Inter-Process Communication)를 사용하면 프로세스간 정보를 주고 받는 것이 가능하다.

Thread


프로세서의 자원을 이용하여 실제로 작업을 수행하는 주체이기 때문에 모든 프로세스는 하나 이상의 Thread를 가지고, 두개 이상의 thread를 가진 프로세스를 multi-thread 프로세스라고 한다. 과거에는 프로그램을 실행할 때 실행 시작부터 끝까지 프로세스 하나만을 사용하였는데, 시간이 흐를 수록 프로그램이 복잡해지고 프로세스 하나만을 사용해서 프로그램을 실행하기 벅찬 상황이 왔다. 한 프로그램을 처리하기위해서 프로세스를 여러개 만들면되지 않을까라는 생각에서 출발하였는데, 운영체제는 안전성을 위해서 프로세스마다 자신에게 할당된 메모리 내의 정보에만 접근할 수 있기 때문에 프로세스보다 더 작은 실행단위의 계념이 필요하게 되었고 그것이 스레드이다.

Thread_process

프로세스가 할당받은 메모리영역 내에서 Stack 형식으로 할당된 메모리영역은 따로 할당받고, 나머지 Code/Data/Heap 형식으로 할당된 메모리 영역을 공유한다. 따라서 각각의 쓰레드는 별도의 스택을 가지고 있지만 힙 메모리는 서로 읽고 쓸 수 있게 된다. 이런 공유하는 특징 때문에 한 스레드에서 오류가 발생하면 동일 프로세스내에 다른 스레드가 모두 종료되게 된다. (프로세스 끼리는 독립적이여서, 프로세스1개가 오류가나서 종료되어도 다른 프로세스에는 영향을 미치지 않는다.)

Thread_shared_resources

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