在c++中,在多线程编程中,为什么要把一些线程给挂起呢?这样做有什么目的呢?
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励20(财富值+成长值)
2个回答
展开全部
线程的执行需要提供运算资源,而计算机最直接的运算资源,除了内存,就是CPU了。线程的执行需要占用CPU时间。操作系统为了模拟用户“看起来的并发",其底层其实是使用时间片轮询的策略,也就是,会将CPU时间切割成粒度较小的时间片,然后轮流提交到各个线程去执行,在用户可感知的时间内,每个线程也就都得到了运行的机会。
交给”各个线程“去执行,更确切的说法是,交给”各个等待运行的线程“去执行。而挂起线程,实际上,就是告诉操作系统,这个线程不活跃了,暂时不需要运算了,可以从上述的等待运行线程队列中去去掉,然后放入”挂起线程池“中,以后操作系统CPU调度的时候,就不再轮询到这个线程无谓浪费CPU时间了,可以让其他真正active的线程得到更充分的CPU运行时间。
那如果这个线程挂起后,在以后某一时刻想重新运行起来怎么办?这个时间就需要去唤醒这个线程了,唤醒线程的过程,其实也就是从”挂起线程池“放入”等待运行的线程队列“过程,当CPU时间轮询到这个线程,就又可以愉快的玩耍了。
交给”各个线程“去执行,更确切的说法是,交给”各个等待运行的线程“去执行。而挂起线程,实际上,就是告诉操作系统,这个线程不活跃了,暂时不需要运算了,可以从上述的等待运行线程队列中去去掉,然后放入”挂起线程池“中,以后操作系统CPU调度的时候,就不再轮询到这个线程无谓浪费CPU时间了,可以让其他真正active的线程得到更充分的CPU运行时间。
那如果这个线程挂起后,在以后某一时刻想重新运行起来怎么办?这个时间就需要去唤醒这个线程了,唤醒线程的过程,其实也就是从”挂起线程池“放入”等待运行的线程队列“过程,当CPU时间轮询到这个线程,就又可以愉快的玩耍了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询