[Java] 프로세스와 스레드

kyliecamila·2022년 7월 31일
0

CS

목록 보기
1/1

프로세스와 스레드가 무엇인지 공부한 것을 정리해보려고 한다.

프로세스 안에 스레드가 있다라고 느꼈는데 포함관계는 아니고 프로세스 안에 여러개 스레드가 있다라는 관점에서 그렇게 생각했다.

프로세스

예를 들어서 동영상재생 앱이 작동할때를 생각해보자.
이때 앱을 하나 열었으니 프로세스는 하나 실행된다.
만약 같은 앱의 창을 여러개 띄우면 프로세스가 2개 이상, 즉 멀티프로세스라고 할 수 있다.

스레드

프로세스를 앱의 단위, 큰 통이라고 생각할 수 있는 반면 스레드는 그 통안에 존재하는 구성품같다는 생각을 했다.

아까 예로든 동영상 재생 앱으로 돌아가보자.
해당 앱의 기능에는 영상을 보여주는 기능과 함꼐 소리를 들려주는 기능이 있다.
즉 기능이 2개가 있는 것이다.(추가 기능이 있다면 기능은 더 늘어나겠지)
이 기능을 실행시킨다는 말을 다르게 하면 작업을 실행시킨다 라고 할 수 있다.

스레드가 1개라면 한가지 작업이 진행되고 있다는 것이고 스레드가 2개이상, 즉 멀티스레드라면 여러 작업이 실행되고 있다는 뜻이다.
이때 비록 멀티스레드 일지라도 프로세스는 1개이다. 이는 싱글스레드 일때도 마찬가지이다.

즉, 한 프로세스(통)안에 한개 혹은 그이상의 스레드(구성품)이 있다고 할 수 있다.

멀티프로세스

스레드는 싱글스레드가 있고 멀티스레드가 있는데 프로세스는 어떨까?
프로세스도 마찬가지이다. 아까 앱을 하나 열면 프로세스 하나가 실행된다고 했다. 그렇다면 여러개의 앱을 열면? 바로 멀티프로세스인것이다.

예로 동영상앱과 게임앱을 동시에 켜놓았다고 해보자. 동영상앱에는 스레드가 2개가 있고 게임앱은 스레드가 8개라고 해보자.
이는 두개의 프로세스(멀티프로세스) 그리고 각각 2개, 8개의 스레드가 실행되고 있는 상태이다.
두개의 큰 박스가 있고 한 박스에는 실(스레드)가 2개 나머지 박스에는 실이 8개 들어있다고 생각하면 될 것 같다.

*운영체제의 자원은 한정되있다. 따라서 프로세스가 많아지면 한 프로세스당 할당받을 수 있는 양은 자연히 줄 것이다.

그렇다면 프로세스와 스레드의 다른 차이는

이번에는 독립성 오류관점에서 생각해보자.

운영체제라는 것이 있는데 사용자가 앱을 실행하면 프로세스는 운영체제로부터 앱 실행에 필요한 자원인 메모리를 할당받는다.
프로세스는 할당받은 메모리를 프로세스에 포함된 스레드들을 실행시키는데 사용된다. 여기서 스레드 실행은 코드를 수행시킨다는 것을 뜻한다.

멀티프로세스에서 각각의 프로세스는 운영체제에서 할당받은 메모리를 가지고 실행하기에 프로세스끼리는 독립적이다.
즉 하나의 프로세스가 잘못되어도 다른 프로세스에는 영향을 주지 않는다.
이미 할당 받은 자원을 각자 알아서 사용하는 것이기에 서로 독립적이다.
그리고 이러한 프로세스들은 병렬적으로 실행된다. 여러앱을 동시에 쓸 수 있다는 말이다.

(참고로 위처럼 멀티프로세스를 실행하는 것도 멀티태스킹이라고 하지만, 한 프로세스 내에서 멀티스레드를 실행시키는 것도 멀티태스킹이라 한다.)

그렇다면 스레드는 어떨까. 멀티스레드는 한 프로세스에 속해 있다.
같은 자원을 그떄그때 필요에 따라 공유해서 쓰는 것이다.
스레드는 프로세스 내부에서 생성되는 것이기 떄문에 한 스레드에 문제가 생기면 다른 스레드도 종료가 될 수 있다.
왜냐하면 한 프로세스에 문제가 생기면 프로세스 자체가 종료될 수 있는데 그러면 실행되고 있는 모든 스레드가 함꼐 종료되기 때문이다.

위의 예를 대입하자면 동영상앱이 문제가 있어도 게임앱은 이와 관계없이 잘 작동한다.(프로세스끼리는 독립적이다.)
하지만 동영상은 재생은 되고 소리는 안나오는 경우 결국 동영상앱은 작동하지 않는다.(스레드끼리는 영향이 있다. 또한 스레드가 문제가 있으면 프로세스도 종료될 수 있다.)

즉, 프로세스끼리는 독립적이지만 스레드끼리는 서로 영향이 있다.(물론 같은 프로세스의 스레드라는 가정하에)

0개의 댓글