상호배제에 의해 나타나는 문제점. 둘 이상의 프로세스들이 각각 자원을 점유한 상태에서, 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 서로의 작업이 끝나기만을 기다리다가 영원히 끝나지 않는 상황을 의미한다.
하나의 CPU는 하나의 작업만 진행해야 한다. 이를 극복하기 위해 시간차를 활용하여 진행함. 여러개가 동시에 CPU에 진입하게 되면 데드락(deadlock)에 걸린다.
프로세스는 컴퓨터에서 실행 중인 프로그램의 인스턴스(instance)입니다. 즉, 메모리에 올라가서 실행되고 있는 프로그램을 의미합니다. 각 프로세스는 다음과 같은 특성을 가집니다
프로세서는 컴퓨터의 중앙 처리 장치(Central Processing Unit, CPU)를 말합니다. CPU는 컴퓨터 시스템의 핵심 부품으로, 주요 작업은 다음과 같습니다
쓰레드는 프로세스 내에서 실행되는 실행 단위로, 프로세스의 일부입니다.

쓰레드는 프로세스 내에서 독립적으로 실행될 수 있는 최소 단위입니다. 각 쓰레드는 자신만의 실행 경로를 가지며, 다른 쓰레드와는 메모리 공간을 공유합니다. 즉, 같은 프로세스 내의 쓰레드들은 같은 메모리 공간에 접근할 수 있습니다.
쓰레드는 경량(lightweight) 프로세스라고도 불립니다. 이는 쓰레드가 프로세스의 자원을 공유하면서 생성 및 관리하는 것이 상대적으로 적은 비용으로 이루어지기 때문입니다. 프로세스에 비해 쓰레드를 생성하고 전환하는 데 더 적은 시간과 자원이 소모됩니다.
하나의 프로세스 내에서 여러 개의 쓰레드가 동시에 실행될 수 있습니다. 이들 쓰레드는 동시에 여러 작업을 수행하거나, 동기화를 통해 작업을 조율할 수 있습니다. 다중 쓰레드를 사용하면 여러 작업을 병렬적으로 처리하여 시스템의 성능을 향상시킬 수 있습니다.
쓰레드를 사용하면 여러 작업을 동시에 실행할 수 있어 동시성을 향상시킬 수 있습니다. 예를 들어, 사용자 인터페이스(UI) 스레드가 사용자 입력을 처리하는 동안 다른 스레드는 백그라운드에서 데이터를 처리할 수 있습니다.
특히 사용자 인터페이스가 있는 애플리케이션에서 중요합니다. 긴 시간 동안 실행되는 작업을 별도의 스레드에서 처리하면, 메인 스레드는 사용자 입력에 즉시 응답할 수 있어 애플리케이션의 응답성이 향상됩니다.
멀티코어 CPU가 일반화됨에 따라, 여러 스레드를 사용하여 병렬 처리를 수행하면 성능을 크게 향상시킬 수 있습니다. 예를 들어, 대용량 데이터 처리, 이미지 렌더링, 과학 계산 등에서 여러 코어를 동시에 활용하면 처리 속도가 빨라집니다.
같은 프로세스 내의 여러 쓰레드는 동일한 메모리 공간을 공유합니다. 이는 데이터를 교환하거나 공동 작업을 수행할 때 유리합니다. 예를 들어, 웹 서버에서는 여러 클라이언트 요청을 처리하기 위해 각 요청을 별도의 쓰레드에서 처리함으로써 자원을 효율적으로 사용할 수 있습니다.
비동기 작업을 처리하는 데 쓰레드가 유용합니다. 예를 들어, 네트워크 요청, 파일 입출력, 데이터베이스 쿼리 등 시간이 오래 걸릴 수 있는 작업을 비동기로 처리하면, 다른 작업들이 중단되지 않고 계속해서 진행될 수 있습니다.
쓰레드를 사용하면 복잡한 프로그램을 더 작은 단위로 나누어 구현할 수 있어 유지보수가 쉬워지고, 특정 기능을 추가하거나 개선할 때 다른 부분에 영향을 주지 않고 확장할 수 있습니다.