1. Thread
thead 는 프로세스의 하위 호환이다. 프로세스는 한개 이상의 스레드를 갖는다. 스레드는 Code, Data, OS 가 준 Resource 를 공유한다. Heap, Stack, Register 같은 임시 데이터만 다르다. 그래서 비슷한 일을 하지만 독립된 프로세스가 필요한 경우 프로세스를 하나 더 만드는 것보다 스레드가 효율적이다. 또한 멀티프로세서 환경에서 Parallelism 으로 나아갈 수 있다. Concurrency 는 여러개의 프로세스가 진행되도록 하는 거고 Parallelism 은 정말로 동시에 진행되는 것에 주의하자.
thead는 또한 OS scheduler 에서 독립적으로 조정되는 가장 작은 프로그래밍된 명령어 시퀀스이자, CPU 사용의 기본단위이다.
커널은 OS 위에서 kernal Support 없이 Library 로 돌아가는 User threads 와 OS 가 직접적으로 지원하는 kernal thread 가 있다. 그런데 모든 User thread 는 한개 이상의 kernal thread 에서 돌아가야 한다.
1. Many to One model : 1개의 kernal thread 가 여러개의 user thread 를 커버함. kernal thread 는 하나라서 parallelism 이 작동되지 않음.
2. One to One model : parallerism 은 잘 되는데 스레드 추가때 마다 kernal thread 가 필요해서 오버헤드가 많음. 그래서 스레드 수가 제한적인 편.
3. Many to Many model : kernal thread 가 user thread 보다 같거나 적은데 이걸로 나머지 user thread 를 처리함. 위의 장점을 합치고 단점을 없앤 버전. user thread 가 blocking 되면 이걸 담당한 kernal thread 는 딴거 하면 되는 또 다른 장점.
2. 3 을 섞기도 함.
2. 멀티코어 프로그래밍
Amdahl's Law
N은 코어의 갯수, S 는 동시에 진행 못하는 비율, 0~1 사이. N 극한 보내면 S에 따라 스피드가 결정이 된다.
이를 위해선 프로그램을 독립적으로 분리해야한다. 또 비슷하게 나눠야지 안그러면 한 코어는 놀거다. 데이터도 나눠야한다. 이러면 코딩/디버깅 하기 어렵다.
댓글 없음:
댓글 쓰기