usleep和yield
yield()放弃的是一次时间片,下一次调度还是可以正常运行的,对当前线程的性能影响比较小一点。因此性能敏感的代码可以使用yield()。
usleep()放弃的是一段时间,当前线程可能在N个时间片之内都不会被调用运行,对当前线程的性能影响比较大一点。性能不敏感的代码可以使用usleep()系列函数。一般使用sleep()系列函数都是想在没事做的时候主动降低线程CPU占用率。
另外可能有一些低级OS实现sleep()系列函数时内部采用自旋锁实现,当前线程并没有放弃消耗CPU时间片,而是一直把时间浪费在进行各种条件判断工作的事情上。