C/코딩
native c poll 함수는 polling인가
동바리
2022. 1. 13. 09:20
일반적으로 polling이라함은 아주 쉬운 설명으로 cpu가 주변장치에게서 읽을것이 있나없나 스스로 확인하는것을 의미합니다. 그런데 문득 들었던 생각이 poll 함수는 polling인가라는 것이었습니다.
제 생각으로 아니라고 결론지었습니다.
우선 polling이라함은 interrupt 방식과는 대조적으로 polling rate도 설정해야 하는등 수동적인 조작이 필요한 부분이 있습니다. 예를 들어 pseudo-code로 확인할 수 있습니다.
while (true) {
if (eyboard.is_readable()) {
do_something()
} else {
sleep(wait for);
}
}
sleep 함수를 이용해 적당한 polling rate를 설정해줘야 합니다. 이렇게 되면 while문을 돌리는 task가 cpu 점유권을 가지고 지속적으로 keyboard.is_readable()을 통해 키보드 입력이 있는지 확인합니다. 이에 따른 최악의 경우로는 키보드 입력이 없는데도 불구하고 지속적으로 키보드로부터 읽을것이 있나 확인하게 되는것이죠. 즉 cpu 사이클 낭비입니다.
하지만 poll 함수는 timeout을 걸어서 해당 task를 block 상태로 만듭니다. poll 함수의 description을 보도록 하죠.
The timeout argument specifies the number of milliseconds that poll() should block waiting for a file descriptor to be‐
come ready. The call will block until either:
* a file descriptor becomes ready;
* the call is interrupted by a signal handler; or
* the timeout expires.
mint os 에서 man poll 입력한 후 timeout에 대한 description을 확인할 수 있습니다. 해당 디스크립션을 참조해보면 poll 함수가 polling과 용어가 비슷하다고 해서 polling을 의미하는거다라고 볼 수 없을것 같습니다.
**순전히 개인적인 생각입니다. 틀린 부분이 있다면 지적해주세요~