在看公司项目中发现超时控制中使用select替代sleep就行阻塞,循环检查任务是否超时,在网上找了很多资料说了select的各种好处:
1:sleep不准确,只能精确到秒(这个我感觉可以使用usleep代替,不是个很好理由)。
2:sleep容易受到系统信号,例如SIGALRM影响,各个系统版本实现不一,sleep是个glic库函数,不是系统调用。
3:更高级的说话是,sleep浪费CPU,使程序阻塞。
我的分析思路:
程序调用sleep就是放弃cpu执行,进入阻塞状态,但是sleep的秒数过后,有可能有很多进程或线程在竞争cpu,而且优先级都比当前程序高,导致当先进程或线程无法立即执行,这是导致sleep不准确的一个原因。
gnu里介绍sleep:
The function sleep gives a simple way to make the program wait for a short interval. If your program doesn’t use signals (except to terminate), then you can expect sleep to wait reliab