프로세스... 스레드... 멀티 프로세스... 멀티 스레드...
프로그램(program)
프로세스에 대해 바로 알아보기전에 이해들 높이기 위해 간단하게 프로그램부터 설명을 해보겠다
프로그램은 뭘까?
이런 것들을 프로그램이다 해당 프로그램들 이름을 자세히 보면 맨뒤에 .exe가 붙어 있을것이다 ex. riot client.exe, power point.exe
이렇게 실행되지 않은 프로그램들을 정적 프로그램이라고 부른다
프로그래밍 언어로 프로그램을 개발만 한다면 딱 코드 덩어리이지만 실행을 시키면 말이 달라진다
프로세스(process)
프로세스는 위에서 말한 프로그램이 실행된 것을 말한다(실행 작업의 단위)
실행이 되었다는 것은 운영체제로부터 메모리와 CPU를 할당 받았다는 것이다
그리고 cpu는 한번에 한개의 프로세스만 작동시킬수 있다
context switching
내가 방금 위에서 프로세스가 cpu를 점유하고 있으면 다른 프로세스는 실행 할수 없다고 하였다 하지만
내가 개발하고 있는 환경만 보더라도 Chrome, VS Code, Apple Music 등등 여러 프로그램을 실행시키지만
노래가 끊긴다거나 VS Code 입력이 안된다거나 하지는 않는다 왜 그런것일까?
바로 짧은 텀 동안 계속해서 여러 프로세스를 전환시키기 때문이다
여기에 동시에 실행시키고 싶은 2개의 프로세스 chrome과 vs code가 있다고 해보자
- chrome이 cpu를 점유하고 vs code가 준비 상태에 있는다
- chrome이 준비 상태로 내려가고 vs code가 cpu를 점유한다
이러한 과정을 짧은 텀 동안 계속해서 반복하기 때문에 우리는 동시에 작동된다고 생각한다 (동시성 (concurrency))
스레드(thread)
스레드는 프로세스 안에 있고 동시에 실행되는 작업 갈래, 흐름 이라고 생각하면 된다(실행 흐름의 단위)
스레드는 경량화된 프로세스라고 생각하면 된다
왜냐하면 프로세스의 경우에는 context switching을 한다면 프로세스 전체를 전환 시켜야 하지만
스레드의 경우에는 여러 스레드끼리 자원을 공유하기 때문에 일부만 전환하면 되서 가볍고 효율적이다
multi-process vs multi-thread
면접질문으로 multi-process와 multi-thread의 차이가 뭔지를 물어본다
차이를 살펴보자면 process끼리는 서로 자원을 공유하지 않아서 독립적이다 그래서 동기화 작업에 신경을 쓰지 않아도 되지만 context switching 비용이 크다 하지만 thread는 서로 자원을 공유해서 상호적이다 그래서 동기화 작업에 신경을 써야하지만 context switching 비용이 적다 하지만 thread는 한개의 thread에서 문제가 생긴다면 다른 thread와 자원을 공유하고 있기 때문에 모든 thread에 문제가 생긴다
추가로 chrome과 internet explorers는 각각 multi-process와 multi-thread 방식을 사용한다
internet explorers에서 여러 탭을 사용하고 있다가 한 탭에서 문제가 생긴다면 아래 사진과 같이 된다(공유 자원을 사용하기 때문이다)
하지만 chrome은 여러탭이 각각 프로세스이기 때문에 비용이 많이 들지만 다른 탭에 영향을 받지 않아서 안전하다고 할수 있다
multi-core
내가 방금 위에서 프로세스가 cpu를 점유하고 있으면 다른 프로세스는 실행 할수 없다고 하였다 하지만 이거는 언제까지나 싱글 코어 cpu일때만 해당한다 코어가 여러개면 여러개의 프로세스를 동시에 실행시킬수 있다
multi thread나 process는 소프트웨어적인 개념이고 multi core는 하드웨어적인 개념이다
내 mac book cpu의 코어는 11개이다 이론상 11개의 프로세스를 동시에 실행시킬수 있다
마무리
운영체제에 대한 블로그 작성은 처음인것 같다 아직 많이 부족하고 더 공부해야겠다는 생각이 든다
이 글은 내가 공부하면서 작성한 내용이라 실제와 다른부분이 있을수 있다(피드백 환용)