一、线程的概念
线程是进程内部的一条执行序列或执行路径,一个进程可以包含多条线程。
一个进程中有两条或多条执行路径的时候,它们是可以同时执行的,也就是说,一个进程中的多个线程是可以同时执行的。当我们需要一个程序同时执行两个不同操作的时候就引入了多线程。如果是一个单线程,只有一条路径时,不可能同时执行两个不同操作,因为其中一个操作正在执行的时候,另一个操作是阻塞状态。
当一个进程有一个主线程和一个子线程的时候,主线程和子线程可以同时执行;也可以有多个相同的子线程,这样就是一个主线程和多个子线程同时执行,多个子线程做的事情是一样的;也可以有多个不同的子线程,这样就是一个主线程和多个不同的子线程同时执行,多个子线程做的事情不一样。
二、线程的实现方式
在操作系统中,线程的实现有以下三种方式:
1.用户级线程
在用户空间模拟出了多条执行路径,但在内核的眼里只有一条执行路径,这种线程的创建不需要操作系统参与并且可以创建很多,这种线程的缺点是无法进入多个处理器,因为内核无法感知到每一个线程的存在,所以无法把每一个不同的线程放到不同的处理器上让它执行。用户级线程的优点是在用户空间创建,开销比较小,可以创建很多,缺点是无法使用多个处理器。
2.内核级线程
利用内核提供的接口去创建线程,创建内核级线程是需要操作系统参与的,这种线程是由操作系统来直接管理,内核也可以感知到每一个线程的存在,所以内核级线程的创建离不开操作系统的支持,可以将其中一个线程分配到某一个处理器上将另一个线程分配到另一个处理器上,它就可以实现真正意义上的并行。内核级线程的优点是可以使用多个处理器,缺点是开销大。
3.组合级线程
会在内核中创建多条内核级线程,目的是为了能够使用多个处理器,也会在用户空间创建多个用户级线程。所以,组合级线程可以利用多处理器的资源,同时可以在用户空间创建多个用户级的线程,是我们后期创建线程的开销可以变小,因为当线程数目超出处理器数目的情况下,最后还是只能时间片轮转。
Linux 中线程的实现:
Linux 实现线程的机制非常独特。从内核的角度来说,它并没有线程这个概念。Linux把所有的线程都当做进程来实现。内核并没有准备特别的调度算法或是定义特别的数据结构来表征线程。相反,线程仅仅被视为一个与其他进程共享某些资源的进程。每个线程都拥有唯一隶属于自己的task_struct(PCB),所以在内核中,它看起来就像是一个普通的进程(只是线程和其他一些进程共享某些资源,如地址空间)。实际上,如果创建2个线程,它会消耗2个pid,对外呈现的是主进程的pid,就是主线程的pid作为整个进程的pid。
三、进程与线程的区别
1.进程:一个正在运行的程序
进程是资源分配的最小单位;
进程有自己的独立地址空间;
进程的创建消耗资源大;
进程的切换开销大。
2.线程:是进程内部的一条执行序列或执行路径文章来源:https://www.toymoban.com/news/detail-668973.html
线程是CPU调度的最小单位;
线程共享进程中的地址空间;
线程的创建相对较小;
线程的切换开销相对较小。文章来源地址https://www.toymoban.com/news/detail-668973.html
到了这里,关于Linux 线程的概念与实现方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!