프로세스
프로그램(ex. Chrome, KaKaoTalk, IntelliJ, Slack 등등.. )이 동작을하면 프로세스가 되어 메모리에 올라가서 실행이 됩니다.
이때 OS 혹은 다른 프로그램에서 프로세스가 한개가 아닌 여러개가 실행되는 것을 볼 수 있는데 여러개가 동시에 실행이 된다고해서 정말 동시에 실행이 되는것이 아닙니다.
동시성
동시성은 사실 동시에 일어나는 작업이 아닌, 컨텍스트 스위칭 이라는 작업을 통해서 빠르게 한 프로세스 씩 수행하는 방법입니다.
동시에 실행하고 싶은 프로세스 두개가 있습니다.
프로세스 1 이 CPU 로 올라갑니다.
프로세스 1은 준비상태로 내려가고 프로세스 2가 다시 CPU 로 올라갑니다.
프로세스 1은 CPU로 올라가고 프로세스 2가 준비 상태로 내려갑니다.
이 과정을 컨텍스트 스위칭 이라 부릅니다.
작업이 너무 빠르게 진행되다보니 동시에 일어나는 것 처럼보여서 동시성 이라고 합니다.
프로세스와 스레드
운영체제에서는 여러개의 프로세스가 돌아가는데 그 안에서 또 실행되는 작업들은 스레드라 부릅니다.
예를들어 IntelliJ 를 켜서 코딩을 함을 동시에 크롬에는 유튜브 플레이리스트와 구글링을 동시에 한다고 가정했을때
프로세스 A = IntellJ
프로세스 A 의 스레드 1 = 코드 실행
프로세스 A 의 스레드 2 = 코드를 작성하는 작업
프로세스 B = Chrome
프로세스 B 의 스레드 1 = 유튜브
프로세스 B 의 스레드 2 = 구글링을 하는 작업
이라고 볼 수 있습니다.
멀티 프로세스와 멀티 스레드
멀티 프로세스와 멀티스레드는 처리 방식의 일종입니다.
예시를 들자면 다음과 같습니다.
다들 Chrome, Internet Exprlor 써보신적 있으시죠??
Chrome 은 멀티 프로세스 방식으로 한 탭에 문제가 생겨도 다른 탭에 영향이 가지 않는 특징이 있습니다.
반면 Internet Exprlor 는 멀티 스레드 방식으로 한 탭에 문제가 생기면 다른 탭이 모두 꺼져버리는 특징이 있습니다.
( 중학교때 과제하느라 창을 엄청 많이 켜뒀는데 오른쪽 화면처럼 경고창이 뜨면서 다 꺼졌었던 기억이 있네요.. )
다음에는 자바를 이용하여 제가 최근 프로젝트를 하면서 겪었던 스레드와 동시성 문제에 대해 다뤄보도록 하겠습니다.
Reference
- https://www.youtube.com/watch?v=1grtWKqTn50&t=631s
- https://www.youtube.com/watch?v=iks_Xb9DtTM
- https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
댓글