컴퓨터 자원을 효율적으로 활용하고, 상황에 따라 작업의 안정성 또는 처리 속도를 개선하기 위한 기법
하나의 프로그램이 여러 개의 프로세스르르 생성해, 각각이 독립적으로 실행되는 구조
각 프로세스는 자신만의 메모리 공간을 가지고 있음.
하나의 프로세스에서 문제가 생겨도 다른 프로세스에는 영향을 미치지 않아 높은 안정성을 가짐
이처럼 격리된 실행 환경은 보안성과 충돌 방지에 강점
ex- 크롬 브라우저의 탭 구조
각 탭이 별도의 프로세스로 실행되기 때문에, 한 탭에서 무한 루프나 오류가 발생해도 브라우저 전체가 몸추지 않고, 해당 탭만 종료됨
단점은 프로세스마다 메모리를 별도 할당 받기 때문에 시스템 자원 소모가 큼
또한 다른 프로세스 간 데이터를 주고받기 위한 IPC(Inter-Porcess Communication)도 복잡하고 비용이 높음
하나의 프로세스 내부에서 여러 스레드가 동시에 작업을 수행하는 구조
스레드들은 하나의 메모리 공간을 공유하고, 가볍고 빠른 작업 분할이 가능하다는 점에서 성능 효율이 높음
ex- 서버에서 네트워크 요청을 동시에 처리하거나, 게임에서 여러 캐릭터의 움직임을 병렬로 계산할 때 효과적
멀티 스레드 구조에선 공유 자원에 대한 충돌 문제가 존재하기도 함.
두 스레드가 동시에 같은 메모리 주소를 수정하려고 할 때, 데이터가 꼬일 수 있으며, 이를 방지하기 위해 락이나 세마포어 같은 동기화 기술을 사용해야 함.
이러한 동기화 처리에는 추가적인 코드 복잡도와 성능 저하의 위험도 따름