프로세스 : 실행중인 프로그램의 단위.
독립된 메모리 공간을 갖는다. 다른 프로세스와는 메모리가 격리되어 있어 직접 접근 불가.
정확히는 IPC 가 필요하다.
IPC? : Inter Process Communication 의 약자로 프로세스간의 통신을 의미한다. 운영체제에서 실행 중인 여러 프로세스들이 서로 데이터를 주고받고, 정보를 공유하며, 동기화 할 수 있도록 도와주는 매커니즘. 대표적인 IPC 기법은 다음과 같음.
그래서 왜써요 ?
하나의 거대한 프로그램으로 모든걸 처리하는 대신, 각자 역할을 맡은 작은 프로그램들로 나누어 서로 소통하여 작업을 처리하려고. 작업을 작게 쪼개면 프로그램을 만들고 관리하기가 쉬움. 한 프로세스에 문제가 생기더라도 다른 프로세스는 영향을 받지 않고 계속 실행될 수 있음.
그래서 언제써요 ?
파이프 : 한 프로세스의 처리 결과를 바로 다른 프로세스의 입력으로 넘겨주고 싶을 때. 터미널에서 여러 명령어를 조합해서 간단한 작업을 즉석에서 처리할 때.
메시지 큐 : 작업 큐에 씀. 수신측이 바로 처리할 수 없는 상황이라도 데이터를 안전하게 보관했다가 나중에 처리해야할 때. 당장 처리해야하는 작업들을 안전하게 보관하고 여러 프로세스에게 작업을 효율적으로 분배하고 싶을때. 동영상 변환 요청 같은거.
공유 메모리 : 속도가 제일 중요할 때. 대용량의 데이터를 여러 프로세스가 실시간으로 읽고 써야할 때. 실시간 그래픽 렌더링이나 대규모 DB 시스템.
소켓 : 주로 네트워크를 통해 다른 컴퓨터의 프로세스와 통신해야 할 때. 로컬 호스트.
스레드 : 프로세스 안에서 실행되는 작업 흐름 단위. 같은 프로세스의 스레드 끼리 Heap, Code, Data 영역을 공유하고 Stack 만 따로 가짐. 같은 데이서를 쉽게 공유할 수 있지만, 동기화나 정합성에 문제가 발생할 수 있음.