首页 > 多线程的底层原理是怎么样的?

多线程的底层原理是怎么样的?

最近重新学习了Java多线程的那部分,从而对多线程有了新的认识和疑问。

对于使用编程语言来说,往往是使用几个已经提供给你的API就行,虽然书上也有一大部分介绍了线程是个啥,但总体来说都是一种抽象概念,我想知道多线程的底层的具体是怎么实现的?

目前题主已知的知识:

补充解释一下,我想知道的并不是细致到每一个电路都需要怎么实现,而是想明白当我们调用start()这个函数的时候,底层到底是发生了什么,系统是怎么做到宏观上的并行,微观上依旧是串行这样的呢?

希望各位能够解答我的问题啦或者给出相关资料,谢谢哒……


操作系统维护了一个任务队列,Java调用.start()之后会把任务放进队列之中等待执行
CPU不会一直执行同一个任务,而是每执行一段时间,就保存当前任务的状态,然后从队列中取到下一个任务继续执行


你貌似已经掌握了不少相关知识,只是还不太了解线程的底层实现(硬件和系统级)。

多线程之所以能够实现,第一是硬件的功劳,也就是CPU。现代的CPU有一个很重要的特性,就是时间片。每一段获得CPU的代码只能运行一个时间片规定的时间,例如10ms。到时间之后CPU就会把正在运行的代码暂停,然后发生一个中断。这个中断是系统级的事件,只有操作系统能够接手,这样控制权就落到了操作系统手里。

接下来就是操作系统的事情了。线程对操作系统来说就是一段代码+运行时数据(主要是寄存器数据,还有线程中与资源相关的数据,比如打开的文件等)。操作系统会为每个线程保存相关的这些数据,当接收到来自CPU的时间片中断事件时,就会按一定规则从这些线程中选择一个,恢复它的运行时数据,这样CPU就可以继续执行这个线程了。

选择一个合适的线程的过程称为线程调度,最简单的规则是FCFS,也就是按排队的时间先后顺序调度,谁先来排队,下一个就让谁运行。另外还有按优先级、按任务大小等调度策略,以及多种策略的组合等方式。详细的可以去了解一下操作系统的原理。

Java中线程实现主要依赖于操作系统,其本身不进行线程管理。它只是把线程相关的操作进行了封装和抽象,以方便我们使用。例如,Java中的线程可以设置优先级,但如果操作系统本身不支持优先级调度策略,那么为线程设置优先级是没有任何作用的。

【热门文章】
【热门文章】