×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 2,191,227명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)
반응형

디스크 입출력을 하면 시스템콜을 해야 하기 때문에, 프로세스 작업 효율면에서 커널 레벨 스레드가 더 유리하다.


User-level Thread 모델에서는 스레드가 디스크 입출력을 할 때마다 해당 프로세스 내의 모든 스레드가 중단된다.


반면에, Kernel-level Thread 모델은 커널 스레드가 사용자 스레드에 1:1로 할당되므로 한 스레드에서 시스템콜을 해도 해당 프로세스의 다른 스레드가 중단되지 않는다.


※ 시스템콜 → 스레드 블록 및 커널모드로 전환


즉, 


우선 유저 레벨 스레드와 커널 레벨 스레드의 차이를 알아야 한다.


유저 레벨 스레드를 이용하면 컨텍스트 스위칭을 프로세스 내부에서 진행하면 되고, 커널로 진입하지 않아도 되어 비용이 적게 든다.


즉, 스레드의 스케줄링 및 동기화에 시스템콜(커널호출)이 필요 없기 때문에 오버헤드가 적다.


그리고 커널 레벨 스레드는 커널이 직접 스레드를 관리해주는 것이기 때문에 유저 스레드 1개당 커널 1개가 맡아준다. 따라서 하나의 프로세스에 여러 유저 스레드가 있어도 동시에 실행이 가능하다.



하지만 여기서 유저 레벨 스레드에 I/O를 이용하면 치명적인 단점이 존재한다.


유저 레벨 스레드를 이용하면 커널은 프로세스 내의 스레드 존재를 모르기 때문에 하나의 유저 레벨 스레드가 I/O를 하면 나머지 모든 스레드가 멈추게 된다.


따라서 I/O를 하기 위해서라면 커널 레벨 스레드를 이용하는게 더 유리하다.

반응형