현재 어플리케이션들은 대부분 멀티쓰레드 방식이다.
하나의 앱 내에 복수의 쓰레드가 이용된다.
쓰레드 이용시 장점은 크게 4가지이다.
응답성 Responsiveness
프로세스의 일부가 막히더라도(blocked), 사용자의 요청을 처리하는 쓰레드는 계속 진행된다.
자원 공급 Resource Sharing
쓰레드는 자신이 속한 프로세스 내부 자원들을 공유한다.
경제성 Economy
프로세스를 생성하는 것보다 쓰레드를 생성하는 것이 빠르다.
프로세스 전환보다 쓰레드 전환이 빠르다.
확장성 Scalability
멀티코어를 이용하는 경우 CPU의 쓰레드를 충분히 활용할 수 있다.
멀티프로세서를 위해 프로그래머가 신경써야 할 5가지
작업 분산 Dividing activities
균형 Balance
데이터 분산 Data splitting
데이터 독립성 Data dependency (병렬 수행을 위해)
테스트 및 디버그 Testing debugging
병렬화 Parallelism
시스템이 하나 이상의 태스크를 동시에 실행할 수 있다.
동시성 Concurrency
하나의 프로세서가 여러 태스크를 진행할 수 있다.
병렬화의 종류
Data parallelism
구현할 데이터 측면의 분배
Task parallelism
수행할 작업의 양 측면의 분배
싱글코어 시스템의 동시 수행
T1, T2, T3, T4의 4가지 태스크를 반복적으로 전환하여 진행한다.
코어가 하나더라도 동시성을 확보하는 방법.
다중코어 시스템의 동시 수행
T1, T2, T3, T4를 2개 코어에 배분하여 진행한다.
각 쓰레드간에 공유되는 자원과 공유되지 않는 자원이 있다.
공유 자원
code, data, files
고유 자원
register, stack ...
함수호출, 지역변수 등이 해당된다.
쓰레드는 크게 유저 쓰레드와 커널 쓰레드로 나뉜다.
User threads
POSIX Pthreads
Win32 threads
Java threads
Kernel threads
Windows
Solaris
Linux
Tru64 UNIX
Mac OS X
댓글