概念:
线程是进程内部的一条执行序列(执行流:一组有序的执行流程),一个进程可以有多个线程,至少有一个线程,就是main函数所代表的执行序列-------主线程。线程库创建线程(由一个函数来执行序列)–函数线程;可以说线程是轻量级的进程。一旦创建一个线程就会和创建一个进程一样,创建失败不会阻塞,它们是并发执行的。
线程和进程的联系:
在linux上,线程和进程调用的方法都是调用clone函数,只是参数不一样而已,线程的控制信息比较多,而进程的控制信息比较少所以,线程的参数信息比进程的参数信息多得多。所以,在本质上线程和进程是没有太大的差别。
进程和线程的区别:
1、进程是资源分配的最小单位,线程是CPU调度的最小单位 CPU执行的最小的单位是指令
2、一个进程可以有多条线程,但一个线程只能属于一个进程,进程是一个独立的个体;
3、同一个进程中的线程之间的切换要比进程间切换效率要高。
线程的实现的方式:
1、用户级线程
(1)内核实现简单,但是用户程序相对比较复杂;
(2)一条线程阻塞,会造成这个进程阻塞,无法切换到另外的线程执行;
(3)线程的切换效率较高,线程切换不需要陷入内核;
用户态到内核态是线程数是m->1
操作系统内核不支持多线程,线程的实现:创建、调度、管理、销毁必须由用户程序自己;一个进程里有多条线程(多个TCB),但内核中只有一条进程,维护一个PCB;
2、内核级线程
(1)用户程序简单
(2)一条线程阻塞,内核可以立马切换到另一条线程执行
(3)线程切换的效率相对用户级线程较低,每次切换都必须要陷入内核,
用户态到内核态是线程数是m->m
线程的实现是由操作系统内核支持的,每一条线程在内核都有相应的TCB
3、混合级线程
包括内核级和用户级的有缺点
用户态到内核态是线程数是m->n