首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

线程的调度方式——抢占式、非抢占式

在抢占模式下,操作系统负责分配CPU时间给各个进程,一旦当前的进程使用完分配给自己的CPU时间,操作系统将决定下一个占用CPU时间的是哪一个线程。因此操作系统将定期的中断当前正在执行的线程,将CPU分配给在等待队列的下一个线程。所以任何一个线程都不能独占CPU。每个线程占用CPU的时间取决于进程和操作系统。进程分配给每个线程的时间很短,以至于我们感觉所有的线程是同时执行的。实际上,系统运行每个进程的时间有2毫秒,然后调度其他的线程。它同时他维持着所有的线程和循环,分配很少量的CPU时间给线程。线程的的切换和调度是如此之快,以至于感觉是所有的线程是同步执行的。

01

Java多线程探索(一):为什么要使用ThreadPoolExecutor?

其实可以将这个问题替换成,使用单线程处理问题有什么不足?单线程意味着所有的线程都是串行工作,也就是每个线程都必须等待上一个线程全部处理完成之后才能开始工作。当某个线程需要处理一个极大的文件时,此时用户就只能呆呆地等在电脑前直到这个线程处理完成之后才能进行下一项任务的处理。   而当引入多线程的概念之后,所有的线程可以并发的进行工作。注意,这里的并发执行指的是同一段时间内同时进行,但是从微观来看仍然是串行进行(CPU是单核的情况)。 那么有同学会疑惑,既然微观上仍然是串行,为什么说多线程在用户体验上会由于单线程。这里就要归功于线程调度策略,在引入多线程的概念之后,每个线程在使用CPU时都有固定的时间片,如果执行时间超过规定的时间片,那么就需要将CPU让给其他的线程进行使用。从宏观上来看,多个线程同时在进行工作,也就是上面所说的同一段时间同时进行。除此以外,当线程出现由于IO操作等发生阻塞时,也会将资源让给其他线程进行使用。因此,从用户角度来说,多线程的引入提升了用户的体验感。

02

《现代操作系统》—— 调度

现代计算机都是多道程序设计系统。在多道程序设计系统中,通常会有多个进程或线程同时竞争同一个CPU。只要有2个或更多的进程处于就绪状态,那么这种情形就发生了:CPU必须要在多个就绪的进程中选择下一个要运行的程序。在操作系统中,完成这个选择工作的程序叫做调度程序(scheduler)。该程序使用的算法叫做调度算法。 许多适用于进程调度的方法同样也适用于线程调度。内核管理线程的时候,调度是按照线程级别进行的,与线程所属的进程没有关联。本文主要讨论同样适用于进程和线程调度的问题。然后介绍线程调度所独有的问题。本文讨论的问题假设机器是单CPU单核。

00
领券