关于多线程

49 阅读2分钟

线程概念的由来

在计算机科学的早期阶段,程序一般都是单线程的(这里只是运用一下“单线程”这个词汇来解释程序中的执行路径,但此时对应的历史还没出现“线程”这个词),也就是按照顺序执行的。这种方式简单直观,但也存在一些问题(具体问题不列举)。
早期计算机就一个CPU连着内存(如下图),由这个CPU顺序执行内存中的内容。

20231023-143220.jpg

随着计算机硬件技术的发展,人们开始面对更加复杂的任务和需要更高的性能。单线程程序往往难以充分利用现代计算机的多核处理器等强大硬件资源。因此,人们开始研究并发编程,也就是同时执行多个任务。
线程的概念应运而生。线程是程序执行的最小单元,一个进程可以包含多个线程。线程可以在同一个进程内共享资源,因此可以更有效地完成多个任务。


通过编程语言创建多个线程对象,而这些线程对象会由操作系统来调度,并在多个CPU上并发执行

现在计算机都是多个CPU连着内存(如下图),需要充分利用多个CPU去并行执行内存中的内容,于是多线程出现了。
在许多编程语言的标准库中,都包含了与线程相关的类或接口。比如在编写Java程序时,通常需要使用Runnable接口或Thread类来创建多个线程对象来处理不同的程序任务

main-qimg-9b80bd6b090ef408ccd68033f3400055-pjlq.jpg

多线程在编程语言中的体现可能有点像函数调用,但两者差别其实是很大的,函数调用过程是是具体某个CPU的顺序处理,在编程语言里通过比如Thread类的实现创建的线程是经过操作系统的管理后各自获得了不同的“执行路径”的,在进程所在的内存中,通过操作系统的调度把各线程分配给多个CPU以此来实现并发实行,也就是你一个进程里面的多个线程可能是不同的CPU来处理的,控制台的输出结果前后顺序也是根据CPU对于线程的上下文切换速度、或者涉及不同CPU的处理速度还有操作系统的调度情况来看的,多线程不仅通过多个CPU并发处理了多个任务、还大大地提高了程序的运行速度、提高了CPU的利用率。