1. 프로세스
프로세스는 컴퓨터에서 연속적으로 실행되고 있는(실행중인) 컴퓨터 프로그램을 의미한다.
프로그램은 실행되기전의 명령어와 데이터의 묶음을 말하는데, 프로그램이 실행중에 있을 때 프로세스라고 한다.
하드디스크에 저장되어 있는 명령어와 데이터의 묶음-> 프로그램
프로그램을 구동해 , 프로그램 자체와 프로그램의 상태가 메모리 상에서 실행되는 작업 단위 -> 프로세스
일반적으로 CPU는 한 번에 하나의 프로세스만 관리할 수 있다.
우리는 보통 한 번에 여러개의 프로그램을 실행하고 있다. (웹서핑을 하면서 유튜브로 노래를 듣는다) 즉 우리는 한 번에 여러개의 프로세스를 사용하고 있다. CPU는 하나의 프로세스만 관리할 수 있는데 어떻게 여러개의 프로세스를 실행시킬 수 있는거지? -> 멀티태스킹
멀티 태스킹은 정확히 다수의 프로세스를 한번에 실행하고 있는 것이 아니고, 사용자로 하여금 다수의 프로세스가 동시에 실행되는 것 처럼 보이게 만드는 것이다.
즉, CPU가 빠른 시간동안 각각의 프로세스를 순차적으로 실행하고 있는 것이다.
2. 쓰레드
쓰레드는 어떤 프로세스 내에서 실행되는 흐름의 단위를 의미한다. 일반적으로 한 프로그램은 하나의 쓰레드를 가지고 있지만, 프로그램의 환경에 따라 두 개 이상의 쓰레드를 동시에 실행할 수도 있다. 이런 방식을 멀티쓰레드 라고 한다.
프로세스는 실행중인 프로그램을 말하고, 쓰레드는 프로세스 내부에서 실행되는 흐름의 단위인 것이다. 즉 쓰레드는 프로세스 내부에 있는 개체를 말한다. 하나의 프로세스에서는 최소 하나 이상의 쓰레드가 존재한다. 하나의 쓰레드만 있는 경우, 단일 쓰레드라고 하고, 두 개 이상의 쓰레드가 존재하면 멀티쓰레드 or 다중 쓰레드 라고 한다.
쓰레드는 왜 필요한 걸까?
멀티태스킹에서는 다수의 프로세스가 만들어져서 순차적으로 실행된다. 만약 A라는 프로세스와 B라는 프로세스가 대규모의 동일한 데이터를 필요로한다면 어떻게 해야할까? -> 프로세스가 생성되는 초기부터 데이터를 공유하도록 하면 어떻게 될까? 라는 발상에서 쓰레드가 시작된다. + 멀티쓰레드를 통해 메모리를 더 효율적으로 관리할 수 있게 된다.
멀티 쓰레드를 사용하면 다수의 프로세스가 독립적으로 실행되며, 별개의 메모리를 차지하는 것보다 효율적으로 메모리를 사용하게 된다. 또 프로세스간의 전환속도보다 쓰레드간의 전환 속도가 더 빠르다는 장점이 있다.
하지만 쓰레드를 사용하면 동일한 데이터를 전역변수로 사용하게되므로 다양한 문제가 생길 수도 있다 . 값이 제멋대로 변하게 되는..
3.프로세스 VS 쓰레드
프로세스가 실행될 때 운영체제로 부터 자신이 실행할 프로세서, 메모리 공간, 데이터를 할당받는다. 그리고 쓰레드는 프로세스 안에서 실행되는 흐름의 단위로, 프로세스 안에서의 주소나 데이터를 쓰레드끼리 공유하면서 실행된다.
쓰레드가 존재함으로써 데이터와 같은 자원을 메모리에 할당하는 동작이 줄어들어 자원을 효율적으로 관리할 수 있다.
즉, 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위를 말하고, 쓰레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위를 말한다.
4. 멀티 프로세싱과 멀티쓰레딩
1) 멀티 프로세싱
멀티프로세싱은 두 개 이상의 프로세서가 협력적으로 작업을 동시에 처리하는 것을 말한다. (프로세서는 CPU라고 생각해도 무방) 멀티 프로세싱은 여러 개의 프로그램들을
각각의 프로세서가 하나의 작업만 처리하는게 아니고 다수의 작업을 처리하며, 하나의 작업은 하나의 프로세서에 의해 처리되는 것이 아니라 다수의 프로세서에 의해 처리된다.
여러개의 프로세스를 처리해야하는데, 동일한 데이터를 사용한다면 이러한 데이터를 하나의 디스크에 두고 모든 프로세서가 이를 공유하게되면 비용적으로 저렴해짐. 또한 하나의 프로세서가 하나의 작업만 처리한다면, 특정 프로세서가 고장났을 때 , 해당 작업은 정지가 된다. 하지만, 멀티 프로세싱을 사용하면 작업이 정지되는 일은 없다 ( 다른 프로세서에서 처리하면 되니까!) 대신 속도가 좀 느려지는 손해를 안고 가야함.
2) 멀티 쓰레딩
하나의 프로세스 안에 여러 개의 쓰레드가 존재한다. 여러 개의 쓰레드는 하나의 데이터 자원을 공유한다. 때문에 메모리에 대한 효율성을 가질 수 있다.
'Study > Python' 카테고리의 다른 글
[VSCODE/Python] python snippets 로 자주 쓰는 코드 자동완성하기 (0) | 2022.11.14 |
---|---|
[VSCODE/Jupyter Notebook] 주피터 노트북 셀 언어가 CVE로 뜨는 경우 해결 방법 (2) | 2022.01.28 |
[Network/Python] socket으로 데이터 주고받기 (+ 삽질) (2) | 2021.03.28 |
[Python/파이썬] lambda와 sort 정리 (0) | 2021.03.23 |
[Django/Python] (진행중) 점프 투 장고 2-1. 주소와 화면을 연결하는 URL과 뷰 (1) | 2021.03.22 |