Sleep

원래벌레·2022년 4월 12일
0

💎 스케쥴링

  • 커널에서 유저모드에 있는 것들을 어떤걸 실행 할 것인를 정하는 것이다.

  • 커널은 유저모드에 있는 프로그램들에게 시간권을 준다. 해당 프로그램은 커널로부터 받은 시간권(타입슬랩) 동안에는 실행을 보장 받습니다.

  • 그래서 이 보장받은 시간을 쓰거나 포기하거나 하는건 프로그램의 몫입니다.

cf) 커널에서 스레드를 옮길 때 벌어지는 일
1)쓰레드
2)시스템콜
3)blocked(커널로돌아감)
4)스케줄러동작(커널)
5)UpCall
6)스레드관리자
7)다른쓰레드로 시간권이 넘어감

💎 Sleep 방법 코드화

  • this_thread :: sleep_for(std::chrono::miliseconds(100));
    기존의 SpinLock을 돌리던 while문 안에 위의 코드를 넣어주면 100밀리세컨즈 동안은 해당 스레드는 스케줄러가 잡지 않는다.
  • 같은방법 : this_thread::sleep_for(100ms)
  • 시간권(타임슬랩)을 포기하는 명령어
    this_thread::yield(); == this_thread::sleep_for(0ms) 시스템콜을 바로 부른다.
profile
학습한 내용을 담은 블로그 입니다.

0개의 댓글