Linux--线程的基本概念,线程与进程的区别

一.线程的概念

1.线程是进程内部的一个执行分支。
2.线程是程序执行的最小单位。
3.线程是在进程的地址空间内运行。
4.在Linux下,没有真正意义上的线程,线程是用进程模拟的,线程称为轻量级进程。
5.创建一个线程比创建一个进程的粒度小的多(因为创建进程需要分配PCB,需要分配资源,而线程只需要将资源给某个线程)。
6.一个进程里面的线程大部分资源共享,只有少部分独立(独立的东西:上下文信息,运行时栈等);
7.因为Linux下,线程是通过进程模拟的,而每个进程都有PCB,所以每个线程都有一个PCB。
8.执行main函数的线程称为主线程。
9.一个程序至少有一个进程,一个进程至少有一个线程。

二.线程有哪些独立的东西

1.线程id;
2.上下文信息;(因为线程会被切换)
3.运行时栈(用来存放临时变量);
4.线程的优先级.(为了线程调度)
注意:某一个线程栈上的变量也可以被其它线程看到。

三.线程共享的东西

1.地址空间;(共享同一地址空间,实质上每个线程的PCB共用同一个页表)
2.代码和数据;
3.文件描述符表;(所以一个线程打开一个文件,另一个线程也会看到)
4每种信号的处理方式。

四.线程与进程的区别

1.进程是资源分配的最小单位,线程是程序执行的最小单位;
2.创建进程比创建线程的开销要大,因为创建进程会为每个进程都要分配地址空间、创建数据表来维护相应的数据段、堆栈段等;而线程间共享进程的很多数据、地址空间;
3.线程占有的资源比进程要少很多;
4.线程间切换比进程切换要容易,因为线程间共享地址空间,本质就是共享同一张页表;而进程间切换会会切换页表,切换页表意味着就要进行页调度,但是线程之间切换只要能够知道上下文信息就可以;
5.线程没有进程安全(因为线程之间资源是共享的,一个线程出现错误会影响其它线程;而进程之间是独立的,一个进程运行错误不会影响其它的进程);
6.一个进程至少有一个线程,而一个线程只能属于一个进程;
7.进程间通信比线程间通信要复杂的多,线程间通信只要能够定义一个全局变量,就能同时访问这个共享资源。

五.线程与进程各自的使用场景

1.当需要频繁的创建和销毁的优先使用线程,因为线程的创建比进程要容易的多;
2.因为线程切换速度比较快,所以在大量计算时需要频换的进行切换需要用到线程,耗时的操作也可以用到线程,因为可以提高程序的响应;
3.对于CPU密集型应用需要用到线程;
4.并行操作时用到线程。

猜你喜欢

转载自blog.csdn.net/xu1105775448/article/details/81055582