网络编程中,为何线程函数里必须要sleep()一下才行?不懂

线程函数,不是说本来就是一种cpu时间的切换效果吗?
就是说流程上 A流程--B流程---线程函数----C流程----D流程

在这里,CPU执行一下线程函数,然后再往下执行一下流程,如此切换

但为何线程函数里还要弄个sleep()?不是已经能切换了么?

切换效果是当本线程处理完毕才会执行下一个线程,你看到的sleep应该是写到while(1)里的,这里如果不sleep一下,那么代码会一直循环,下一个线程永远也不会执行的。追问

那为何sleep一下,下一个线程就会执行?不是说要线程处理完毕才会执行下一个线程么

追答

sleep就是由你主动告诉操作系统,我这个线程暂时处理完毕了(并不是说你的代码全走完,而是在sleep这行先暂停了)。接着就要说一下sleep(0)和sleep(1)的区别了。0的话,操作系统会去判断一下,没有比你的线程优先级更高的线程想占cpu了,那么你的线程执行sleep(0)之后,依然会继续执行sleep(0)下一行代码,但如果有别的线程优先级更高,那就去执行别的线程了,等其他线程说我们也暂停一下(sleep),那才会又轮到你的线程继续走。而sleep(1)则是不管其他线程比你的线程优先级高或低,都会去执行其他线程。

追问

就是说线程的切换要依靠sleep? 不是吧,有人说,线程是自动会切换的啊,照你的说法,线程切换需要纯手动命令

温馨提示:答案为网友推荐,仅供参考
相似回答