CPU : 중앙처리장치
- 초기의 컴퓨터는 멀티 태스킹이 불가능했다. 그러나 CPU 성능이 개선됨에 따라 Context Switching을 통해서 동시성을 구현하는 것이 가능해졌다.
동시성(Concurrency) : 동시에 실행되는 것 같이 보이는 것
- 2000년대 초반, 한계치 이상까지 CPU의 쿨럭을 끌어올리던 CPU 제조회사들은 2002년에 3Ghz 쿨럭을 돌파했다.
- 그러나 이로 인해 발생하는 발열, 엄청난 전력 소모로 인해 CPU의 작업 속도를 높이는데에 한계가 있음을 발견한다.
- 이에 쿨럭을 올리는 방향이 아닌, 코어의 면적을 넓히는 방향, 즉 멀티 코어 프로세서의 방향으로 나아가기 시작한다.
- 즉 코어 하나를 극한까지 끌어올리는 것이 아닌, 하게 된 것이다.
코어의 수를 늘려서 더 쉽게 CPU 전체의 성능 향상을 도모하는 쪽으로 발전- 그리고 이러한 발전은 프로세서의 숫자를 늘리는 것에서 그치지 않고, 스레드까지 나아가게된다.
프로그램(Program) :
작업을 위해서 실행할 수 있는 파일 (An executable file)
- 프로그램은 바이너리 파일로 되어있다. 그렇다면 이 프로그램을 어떻게 실행시킬까?
- 바로 한다.
프로세스로 프로그램을 실행
프로세스(Process) :
실행되고 있는 컴퓨터 프로그램 (computer program in execution)
- 프로그램(실행 가능한 파일)을 실행 시킨 것이 바로 프로세스이다.
- 프로세스는 메모리에 올라와 실행되고 있는 프로그램의 인스턴스이다.(독립적인 개체)
- 운영체제(OS)로부터 시스템 자원을 할당 받는다.
- 각 프로세스는 최소 1개의 스레드를 가지고 있다.
- 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
- 만약 한 프로세스가 다른 프로세스의 자원에 접근하려면, 프로세스 간의 통신(IPC, inter process communication)을 사용해야한다.
OS로부터 할당받는 자원(메모리 영역) /프로세스의 구성 요소
스레드(Thread) : 프로세스 내의 실행 단위 (The unit of execution within a process)
- 프로세스 안에는 여러개의 스레드가 있을 수 있다.
- 스레드는 프로세스 내에서 Stack만 할당 받고, 나머지는 스레드들끼리 공유한다.
- 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드도 그 변경 결과를 즉시 볼 수 있다.
- 독립적인 스택을 가졌다는 것은, 독립적인 함수 호출이 가능하다는 뜻이다. 그리고 독립적인 함수 호출이 가능하다는 것은, 독립적인 실행 흐름이 추가된다는 것이다.
- 즉 스레드는 스택을 가짐으로서 독립적인 실행 흐름을 갖는다.
[참고]
https://www.youtube.com/watch?v=RrfASw-jfZ4
https://kyun2da.dev/CS/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C/
https://steady-coding.tistory.com/502
https://charlezz.medium.com/process%EC%99%80-thread-%EC%9D%B4%EC%95%BC%EA%B8%B0-5b96d0d43e37
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html