멀티 스레드
멀티 스레딩의 장점
멀티 스레딩을 사용하면 여러 작업을 동시에 처리할 수 있으므로 시스템의 전체 처리량이 향상됩니다. 예를 들어, 한 스레드에서 파일을 읽고 다른 스레드에서 데이터를 처리하는 경우, 처리 시간이 절약됩니다. 또 스레드의 context switch 는 프로세스 context switch 와는 달리 캐시 메모리를 비울 필요가 없기 때문에 더 빠르다는 장점이 있습니다.
멀티 스레딩의 문제점
멀티 프로세스 기반으로 프로그래밍할 때는 프로세스 간 공유하는 자원이 없기 때문에 동일한 자원에 동시에 접근하는 일이 없었지만 멀티 스레딩을 기반으로 프로그래밍할 때는 이 부분을 신경써줘야 합니다. 둘 이상의 스레드가 서로 상대방의 작업이 끝나기를 무한정 대기하면서 교착 상태가 발생할 수 있습니다. 또 공유자원을 안전하게 사용하기 위해 동기화 매커니즘이 필요한데, 이를 구현하는 것이 복잡하며 오류가 생길 가능성이 높아집니다.
멀티 스레드 vs 멀티 프로세스
멀티 스레드는 하나의 프로세스 내에서 여러 개의 스레드가 동시에 작업을 수행것으로 스레드들은 공유 자원에 대한 접근이 가능하며, context switch가 더 빠르다는 장점이 있습니다. 하지만 스레드 간의 상호작용에서 발생할 수 있는 경쟁 조건이나 교착 상태 같은 문제를 해결하기 위한 동기화 처리가 필요합니다.
반면 멀티 프로세스는 각각의 프로세스가 독립적으로 실행됩니다. 따라서 각 프로세스는 자체 메모리 공간을 가지며, 하나의 프로세스에서 문제가 발생해도 다른 프로세스에는 영향을 미치지 않습니다. 하지만 프로세스 간 통신(IPC)이 필요하며, 이는 오버헤드가 발생하고 구현이 복잡합니다.
따라서 멀티 스레드는 공유 자원에 대한 접근이 필요한 경우나 작업의 속도가 빠른 경우에 유용하며, 멀티 프로세스는 각 프로세스가 독립적으로 실행될 필요가 있는 경우나 안정성이 중요한 경우에 유용합니다.