프로세스보다 더 작은 단위를 스레드라고 합니다.
스레드
과거에는 프로그램을 실행하는 주체가 프로세스 하나였습니다. 하지만 프로그램이 점점 복잡해져, 하나의 프로세스 에서도 여러 실행 흐름이 요구되었습니다. 그래서 프로세스보다 더 작은 실행 단위가 필요해서 스레드가 나오게 되었습니다. 하나의 프로세스의 내의 작은 단위이기 때문에 여러 개의 스레드는 프로세스의 메모리를 공유할 수 있습니다.
스레드를 예를 들어 설명해보겠습니다. 스레드는 하나의 프로젝트 팀 중 한 개발자가 하나의 작업을 수행하는 것으로 생각할 수 있습니다. 프로젝트에서 서로 다른 기술을 가진 여러 개발자가 팀 목표를 달성하기 위해 협력해야 하는 것처럼, 컴퓨터 프로그램에서도 여러 스레드가 협력하여 작업을 효율적으로 완료해야 할 수 있습니다. 각 개발자들에게 특정 업무가 주어지는 것처럼 각 스레드에도 특정 업무나 작업이 할당될 수 있습니다. 개발자들이 서로 협업하여 하나의 큰 작업을 같이 수행할 수 있는 것처럼, 스레드들도 서로 협력하여 당면한 더 큰 작업을 수행할 수 있습니다.
개발자가 프로젝트 작업 중에 갑자기 급한 업무가 들어와서 다른 작업을 전환할 수 있는 것과 마찬가지로, 스레드도 작업을 하다가 프로그램의 다른 급한 업무로 전환하여 지정된 작업을 수행할 수 있습니다. 프로젝트의 성공을 위해 팀원 간의 효과적인 커뮤니케이션과 조정이 필수적인 것처럼, 프로그램의 효율적인 기능을 위해서는 스레드 간의 적절한 동기화 및 커뮤니케이션이 필요합니다.
멀티 스레드
프로세스 작업을 할 때, 여러 개의 스레드로 작업을 처리하는 것을 멀티 스레드라고 합니다. 즉, 하나의 프로세스에 둘 이상의 스레드가 작업을 수행하는 것을 의미합니다. 멀티 프로세스는 각 프로세스가 독립적인 메모리를 가지고 있는데 반해, 멀티 스레드는 하나의 프로세스의 여러 스레드끼리는 서로 자원을 공유할 수 있기 때문에 효율이 좋습니다. 또한 스레드들은 서로 독립적이어서, 한 스레드가 죽어도 다른 스레드가 그 작업을 실행할 수 있기 때문에 안정성이 높고, 한 스레드가 작업을 하고 있을 때, 다른 스레드가 들어온 작업을 처리해 줄 수 있어 응답력이 빠릅니다.
공유자원
프로세스, 스레드가 같이 접근, 공유할 수 있는 자원을 공유자원이라고 말합니다. 만약에 두 프로세스가 동시에 공유자원을 사용한다면 어떻게 될까요? 타이밍이나 순서에 따라서 결괏값이 달라질 수 있습니다. 이런 것을 상황을 경쟁 상태라고 합니다. 즉, 프로그램의 출력 결과가 일정하게 보장되지 않고, 매번 달라질 수 있기 때문에 버그가 될 가능성이 큽니다.
임계영역
이렇게 두 프로세스가 동시에 작업하면 안 되는 영역을 임계 영역이라고 합니다. 임계 영역을 해결하기 위해서 잠금(Lock)이라는 메커니즘을 사용하는데, 한 프로세스가 작업을 들어가면 잠그고 나오면 다음 프로세스가 작업하는 방식을 말합니다.
교착상태
deadlock이라고도 하는데, 두 프로세스가 상대방의 자원을 요청할 때, 각자의 작업이 끝나기만을 기다리면서 아무것도 못하는 정체된 상태를 교착상태라고 합니다. 하나의 사다리에서 한 사람은 위로 올라가고, 다른 사람은 아래로 내려가려는 상태로 비유할 수 있습니다. 이 문제를 해결하는 방법은 아직은 없어, 교착상태가 성립되지 않도록 잘 설계해야 합니다. 교착상태의 원인으로는 상호배제, 점유 대기, 비선점, 환형 대기 가 있습니다.
댓글