Programming/OS
OS :: 프로세스(process)와 스레드(thread)의 차이
WANJIN
2017. 10. 16. 21:14
반응형
이번 포스트에서는 프로세스와 스레드의 차이가 뭣인지 설명하도록 하겠다.
1. 프로세스(process)란?
프로세스는 짧게 말해, 실행 중인 프로그램이라고 할 수 있다.
이 대목에서 또 프로그램은 뭐고, 프로세스는 뭔지 헷갈릴 거신데. 뭣이냐면.
프로그램은 하드디스크 등에 저장되어 있는 '실행코드'를 의미한다.
그니까, 맘만 먹으면 실행할 수 있는거긴 한데 정적인 상태의 어떤 파일(?)을 프로그램이라 한다.
프로세스는 그 프로그램을 구동했을 때, 그 프로그램 자체 + 메모리 상에서 실행되고 있는 작업 단위를 말한다.
쉽게 말해, 프로그램을 실행한게 프로세스인데, 이 프로그램을 여러번 구동시키면 여러 개의 프로세스가 생기는거다.
정적인 프로그램과, 동적인 프로세스가 뭔지 대충 이해가 됐길 바란다.
자. 그럼 스레드는 뭐하는 놈일까.
2. 스레드(thread)란?
어떤 프로그램 안에서, 특히 프로세스 안에서 실행되는 흐름의 단위 라고 우리의 위키는 얘기하고 있다.
그니까, 어떤 프로그램을 실행시킨게 바로 프로세스이지 않음?
그 프로세스는 운영체제로부터 프로그램을 돌리기 위해 얼마만큼의 메모리를 포함해서 이것 저것 필요한 자원을 할당받는다.
그리고 스레드는 프로세스에 할당된 자원을 마구 써재끼는, 실제로 실행되는 그런 흐름으로써, 한 놈일수도 있고, 두 놈일 수도 있고, 더 많을 수도 있다.
즉, 프로세스의 업무를 여러개로 나누면 스레드가 되는건데, 얘네들은 서로 프로세스에 할당된 자원을 함께 공유하면서 열심히 작업을 처리하는 애들이다.
스레드가 나오게된 이유는, 한 개의 프로세스에 처리해야 할 작업이 많을 때, 다수 개의 스레드를 통해 동시에 처리하기 위함인데,
이게 바로 멀티스레딩이다.
멀티스레딩(multithreading)은 뭘까?
이건 한 프로세스를 다수의 실행 단위, 즉 다수의 스레드로 구분해서, 여러 스레드가 독립적으로 작업을 병렬로 처리할 수 있는 방법이다.
예를 들어, 수강신청을 100명이 동시에 하러 들어왔다고 해보자.
근데 A학생이 수강신청을 하러 먼저 들어와서, 나중에 들어온 B학생은 A학생이 수강신청을 모두 할 때까지 기다려야 한다면?
옳지 못하다!
수강신청 하루 온종일 해야할지도...
그래서 스레드가 있는건데, 100명의 수강생을 각각 처리해줄 우리의 스레드가 있으면 A학생도 동시에 수강신청을 진행하(는것 처럼 느껴지)게 되는 거시다.
스레드가 100개까지 생성될 수 있다 했을 때, 101번째 사람부터는 100개의 스레드 중 하나가 비어서 일을 처리할 수 있는 상태가 될 때까지 기다리면 된다.
수강신청할 때 분명 꿀교양수업을 신청했는데, 완료버튼을 누르고 났더니 이미 차버려서 못했다고 뜨는 어처구니없는 상황은..
바로 이렇게 스레드 여러개가 남의 수강신청을 다 처리해주고 있기 때무닌 거시다.ㅠ_ㅠ
이렇게 독립된 작업을 동시에 처리할 수 있는게 바로 멀티스레드다.
근데 사실, 이게.. 동시라고 볼 수는 없다.
여러 스레드가 독립적으로 작업을 처리할 뿐이지, 동시에 처리하는 건 아니다.
1번 스레드가 처리하다가, 2번 스레드가 처리하다가. 이거를 번갈아가면서 하는거다.
하지만 느껴지기엔 마치 동시에 하는 것 처럼 느껴진다. 워-낙에 빠르니까.
반응형