Keyword
Thread : 프로세스 내에서 실제로 작업을 수행하는 주체로, 프로세스가 할당받은 자원을 이용하는 실행의 단위
Multi Thread, Multi Threading : 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미.
Traffic : 네트워크 내부에 일정 시간 동안 흐르는 데이터 양
Asynchronous : 요청과 결과가 동시에 일어나지 않는 방식
Concurrency Issues : 여러 스레드가 동시에 같은 인스턴스의 필드 값을 변경하면서 발생하는 문제
Context Switching : 여러 개의 프로세스가 실행되고 있을 때 기존에 실행되던 프로세스를 중단하고 다른 프로세스를 실행하는 것.
Critical Section : 동시 접근하려고 하는 자원에서 문제가 발생하지 않게 독점을 보장해줘야 하는 영역
Why
장점
프로그램의 일부분(스레드)이 중단되거나 긴 작업을 수행하더라도 프로그램의 수행은 계속 된다. 즉, 사용자에 대한 응답성이 증가한다.
프로세스 내 자원들과 메모리를 공유하기에 메모리 공간과 시스템 자원 소모가 줄어든다.
프로세스의 Context Switching 과 달리 스레드 간의 Context Switching은 캐시 메모리를 비울 필요가 없기에 더 빠르다.
다중 CPU 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있으므로 병렬성이 증가한다.
단점
임계 영역(Critical Section) 발생 가능
불필요한 부분까지 동기화 할 경우 과도한 lock으로 인해 병목 현상을 일으켜 성능이 저하될 가능성이 높다.
싱글 코어 멀티 스레딩의 경우 스레드 생성 시간이 오버헤드로 작용해 단일 스레드보다 느릴 수 있다.
대표적인 동시성 문제
경쟁 조건(Race Condition)
두 개 이상의 프로세스가 공동 자원은 병행적으로 (concurrently) 읽거나 쓰는 동작을 할 때, 공용 데이터에 대한 접근이 어떤 순서에 따라 이루어졌는지에 따라 그 실행 결과가 달라지는 상황.
데이터 불일치(Data Inconsistency)
여러 스레드가 동시에 데이터를 읽고 수정하면서 데이터의 일관성이 깨지는 현상
스레드 안정성(Thread Safety)