sleep() 함수를 호출하는 C 프로그램을 작성한다고 가정해 보겠습니다. 예를 들어, sleep(7)을 호출하면 호출 스레드는 7초 동안 휴면 상태가 됩니다.
내 질문은: 각 프로세스가 CPU에 자체 양자 시간을 가지고 있다는 점을 고려하면(계속 실행되는 프로세스가 많기 때문에) 스레드가 우리 시간/시계의 7초 후에 깨어날까요, 아니면 더 오래 걸릴 수 있습니까?
답변1
sleep(3)
호출이 반환되도록 허용하는 정의앞으로,존재하다, 또는뒤쪽에지정된 시간:
설명하다
sleep()
몇 초가 경과하거나 무시되지 않는 신호가 도착할 때까지 호출 스레드를 휴면 상태로 만듭니다.
그래서 우리는 이러한 가능한 상황을 가지고 있습니다
- 신호가 잡히지 않아 통화가 중단되었습니다.
sleep()
지정된 시간 이전에 즉시 반납하세요. - 통화가 성공적으로 완료되었지만 시스템이 너무 바빠서 한동안 작업을 예약할 수 없습니다
- 호출이 만족스럽게 완료되고 실행 대기열에 다시 배치되어 즉시 실행됩니다.
답변2
POSIX는 최소한 귀하가 요청한 작업을 수행하는 성공적이고 중단 없는 수면을 보장합니다.
http://pubs.opengroup.org/onlinepubs/009604599/functions/sleep.html
Linux에서는 1) 반올림 2) 스케줄러가 프로세스/스레드를 CPU에 넣을 때까지 대기 3) 중지된 상태의 시간으로 인해 시간이 더 오래 걸릴 수 있습니다. http://man7.org/linux/man-pages/man2/nanosleep.2.html