1.Sleep() 과
2. 우연의 위험성
3.CPU로 "뽑기"

쓰레드: 실행(연산)의 단위

CPU는 쓰레드단위로 연산을 처리

코어가 4개인데 처리가능한 개수를 곱하면

프로세스
---------------------
쓰레드1

쓰레드2
--------------------
위두가지는 개별연산을 함

쓰레드는 상태라는 개념을 달고다님
Running(작동중임)
Suspend(멈춤)
위두가지의 상태전환이 일어남

쓰레드가하나가 쉬겠다는 뜻으로 ms 단위로 Sleep()을 호출

1ms 동안 쉰다?=> 1ms동안 쓰레드 스케쥴러에서 제외됀다.

제외되었다가 다시 Running 상태로 자동전환되면 발생하는 문제점

쓰레드가 들어갔다 나갔다 하는동안 걸리는 시간이 얼마나걸릴까?

1ms가 정확히 걸리지 않는다 그래서 (2)위험하다.
시간이 얼마나걸리는지 알수없음
그래서 탄생한 단어가 (우연)

얼마나걸리는지는 우연적인 상황에 따라 달라짐.

CPU 타이머 주파수확인?

Sleep(1)을해도
1ms 보다 더 오래걸릴 수 있다.

CPU로 랜덤뽑기로는 랜덤을 뽑을수있다.
CPU 랜덤뽑기로 알수 있는 사실

쓰레드는 개별연산을한다.

이쓰레드는 상태전환을 하면서 서로에게 일을 맡긴다.

근데 이 상태전환에 걸리는시간이 Sleep 1ms라고 정의를 하였지만
Running Suspend는 쉬는게 아니라 관리대상에서 제외가되는것이다.

1ms 동안 쉰다?=> 1ms동안 쓰레드 스케쥴러에서 제외됀다.
여러가지 상황(스케쥴링 할 대상이 얼마나 많은지모른다?)
에 따라 지연이 생기기때문에 
즉 1ms를 보장 할 수 없다.

우연이라는 단어가 탄생

이 우연을 이용해서 CPU로 랜덤함수를 뽑을 수 있다.

복사했습니다!