线程

什么是线程

什么是线程?我们首先得说说为什么要引进线程->从程序到进程,我们实现了进程并发让我的qq和网易云可以同时运行,但是我想用QQ一边视频,一边打字聊天,一边看QQ空间怎么办呢。QQ这个进程里的代码是顺序执行的,我是不是也得让这些小操作也可以并发执行才行,这个时候就得引出我们的线程了。

也就是说进程里可以有多个线程,且这些线程可以被处理机调度,这个时候被处理机调度的就不是进程了,进程只是除CPU外的系统资源分配单元(如打印机等都是分给进程的),线程是调度的基本单位。同时,在以前进程的切换需要切换当前的运行环境,系统开销大,但如果线程在同一个进程下就不需要切换运行环境,系统开销小。

线程的属性

线程是处理机调度的单位

多CPU的计算机中,各个线程可占用不同的CPU

每个线程有一个线程ID,线程控制块(TCB)

线程也有就绪,阻塞,运行三种基本状态

线程几乎不拥有系统资源

同个进程的不同线程共享进程的资源

由于共享内存地址,同一进程中的线程间通信无需系统干预

同一进程中的线程切换不会引起进程切换

不同进程中的线程切换,会引起进程切换

切换同进程内的线程,系统开销很小

切换进程,系统开销较大

线程的实现方式

用户级线程:由应用程序的线程库实现,线程切换可在用户态下完成,无需操作系统干涉;用户能看到,操作系统看不到

用户级线程

在引入内核级线程之前我们先来讲讲为什么需要内核级线程,只有用户级线程不好吗,他切换都不用操作系统干涉的,不是效率高吗。那我们来想想操作系统只能看见进程,只能管进程,那我的处理机资源就给这个进程,当我线程想调I/O设备的时候,肯定要系统调用,转为核心态,这个时候我这个线程就阻塞了,其他的线程呢?因为操作系统看不见他们,就不能调度他们,我处理机在唯一的那个进程那,现在就是进程阻塞了,其他的线程也阻塞了,这样性能大大降低了。那这个时候如果我引入内核级线程,我的处理机就可以供内核级线程调度,而不是单单只供一个进程调度,如果我有一个以上的内核级线程是不是就可以解决上面的都阻塞问题了,但是要知道这就要涉及到内核了,内核级线程切换就要增大开销了。

内核级线程:管理工作由操作系统内核完成,包括线程调度,线程切换等。因此内核级线程要在核心态下完成。

内核级线程
这里需要注意的是,我上面讲了那么多就是想表明一个意思,进程,线程,用户级线程,内核级线程,这一串实际上就是一级一级为了解决上一级问题才诞生出来的机制,所以我这个内核级线程并不是来代替用户级线程,因此我想要用内核级线程,我就也需要有用户级线程

多线程模型

多对一模型:其实这个多对一和之前没有内核级线程没什么区别,也还是会导致都堵塞问题,并发度低,但是进程管理开销小,效率高

内核级线程

一对一模型:其实这个一对一模型就是纯粹的引入内核级线程,这里各线程可以分给多个处理机,并发度高,但进程管理开销大

内核级线程

多对多模型 用户级线程个数>=内核级线程个数,这我认为是不想浪费,内核级线程是来解决问题的,当然不能多弄出来几个浪费啊。多对多模型,就是集上面两者所长。

内核级线程

-------------本文结束感谢您的阅读-------------