프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고, 스레드는 프로세스 내에서 실행되는 흐름의 단위입니다. 가장 큰 차이는메모리 공유 여부입니다. 프로세스는 각자 독립된 메모리 공간을 할당받아 서로 영향을 주지 않지만, 스레드는 자신이 속한 프로세스의 Code, Data, Heap 메모리를 다른 스레드와 공유합니다. 이 때문에 스레드가 프로세스보다 훨씬 가볍고 컨텍스트 스위칭 비용이 낮다는 장점이 있습니다.
멀티 스레드는 멀티 프로세스에 비해 여러 가지효율성측면에서 이점을 가집니다. 첫째, 스레드는 프로세스의 메모리 공간을 공유하므로데이터를 쉽게 주고받을 수 있고 통신 비용이 적습니다.둘째, 새로운 스레드를 생성하고 관리하는 비용이 프로세스보다 훨씬 저렴합니다. 셋째, 결정적으로컨텍스트 스위칭 비용이 훨씬 낮기 때문에더 빠른 작업 전환이 가능하여 시스템 전체의 처리 성능을 높일 수 있습니다. 이러한 이유로, 하나의 작업을 여러 부분으로 나누어 동시에 처리하는 데에는 멀티 스레딩이 더 효율적입니다.
멀티 스레딩의 가장 큰 문제점은 여러 스레드가공유 자원(Shared Resource)에 동시에 접근할 때 발생합니다. 이로 인해경쟁 상태(Race Condition)가 발생하여 데이터의 무결성이 깨질 수 있습니다. 또한, 여러 스레드가 서로 다른 자원을 점유한 채 상대방의 자원을 기다리는교착 상태(Deadlock)에 빠질 수도 있습니다. 이러한 문제들을 해결하기 위해, 공유 자원에 대한 접근을 제어하는동기화(Synchronization)기법, 예를 들어 Mutex나 Semaphore 등을 사용해야 합니다.