프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다.
프로세스라는 말은 생소하지만 모두 한번씩 본적 있다.
윈도우에서 control + alt + delete를 눌러서 작업관리자를 켜서 오류가 생긴 프로그램을 강제 종류할때 프로세스라고 적힌 것을 볼 수 있다.
여기서 프로세서는 워드프로세서를 사용하면서 들어본적 있는데 프로세서와 프로세스같은 것인가 헷깔릴 수도 있다.
하드웨어적 측면
컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛
중앙처리장치를 뜻하며, 적어도 하나 이상의 ALU와 처리 레지스터를 내장하고 있음
소프트웨어적인 측면
데이터 포맷을 변환하는 역할을 수행하는 데이터 처리 시스템
ex) 웨드포로세서, 컴파일러 등
즉 CPU나 Microprocessor라는 하드웨어를 의미한다.
즉 메모리에 적재되어 프로세서에 의해 실행중인 프로그램
여러개의 프로세서를 사용하면 멀티프로세싱이라고 하며 같은 시간에 여러 개의 프로그램을 띄우는 시분할 방식을 멀티태스킹이라고 한다.
시분할 방식은 생소할 수 있는데 프로세스 하나가 여러 프로그램을 아주 조금씩 실행하면서 context-switching하는 것이다.
이작업은 아주 빨라서 사용자는 동시에 여러 프로그램이 실행되는 것으로 느껴진다.
스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다.
브라우저를 실행할때 게임을 다운받으면서 동시에 웹페이지를 돌아다닌 경험이 있을 것이다.
그럴려면 한 프로세스안에도 여러 흐름으로 동시에 진행되어야 한다.
이 흐름들을 스레드라고 한다.
프로세스와 스레드가 헷깔릴 수도 있을 것이다.
비유하자면 프로세스는 은행이고, 스레드는 은행 창구이다.
멀티 프로세스 기반으로 프로그래밍할 때에는 프로세스 간 공유하는 자원이 없다.
멀티 스레드 기반으로 처리하면 메모리 공간과 시스템의 자원 소모가 줄어든다.
스레드 간 통신이 필요할때, 별도의 자원을 이용할 필요 없이 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap영역을 이용하기 때문이다.
그래서 처리량이 향상되고 자원소모가 줄어들면서 프로그램의 응답시간이 줄어든다.
하지만 스레드가 서로 같은 변수에 접근해서 간섭되는 일이 발생하기도 하고 서로 필요한 자원을 점유해서 교착상태가 일어날 수도있다.
그래서 동기화 작업이 추가적으로 필요하다.
참고자료
프로세스 vs 프로세서
얄팍한 코딩사전 - 프로세스, 스레드
사진출처
stack overflow