线程的基本概念及线程与进程的关系

一、深刻理解线程的基本概念
在一个程序里的一个执行路线 就叫做线程;
线程是在进程内运行的;
一切进程至少都有一个执行线程;
(1)Linux下所谓的线程是用PCB模拟实现的;
(2)Linux下的线程称为轻量级进程,以前所说的进程可以理解为只有一个执行流的进程 ;
(3)所谓的线程在进程内运行是指线程在进程的地址空间内运行。
二 、进程和线程的区别
(1)进程是承担系统资源分配的最小实体;
(2)线程是调度的基本单位(调度<—>切换);
(3)线程在维护时比进程更轻量化;
(4)线程对大部分资源都是共享的(共享使线程间通信简单);
(5)线程拥有自己独立的上下文数据;
(6)线程具有私有栈结构;
(7)进程之间具有独立性,线程间相互影响,一个线程一旦出问题,就会影响其他线程。
三、线程共享的资源主要包含:
(1)代码段、数据段、函数、全局变量;
(2)文件描述符表;
(3)每种信号的处理方式(默认、忽略、自定义);
(4)当前工作目录;
(5)用户id和组id。
四、操作系统与进程和线程的关系
用下面这个例子来说明:
如果说,将中国比作是一个大型的操作系统,那么生存在中国的亿万家庭可以看做是一个个的进程,那么每个家庭中的个体就是一个个线程。在我国,国家分配给人民资源的基本单位就是家庭(就是按户口本分配资源。比如说(物业费、低保、医保),而调度这些资源的基本单位是我们人。个体可以单独的去看病、使用低保的这些费用等等。每个家庭都有一个共同的目标(一个进程都有一个共同的任务)。家庭之间的资源都是独立的,可以互相通信来交换资源和数据,也可以老死不相往来。但在一个家庭内部,大部分资源对每个家庭成员都是共享的(比如说是电视、空调、厨房、卫生间),但是也有私有的。比如说:你自己的手机、日记、电脑D盘中那一块隐藏的空间。创建一个家庭成员比创建一个家庭简单。创建一个人只需要在家里的户口上上个户。而创建一个家庭则需要拥有一个自己的房子、家电、交通工具,需要自己和这个国家的省、市、县…建立联系,拥有土地等等。
五、线程的优点
·创建一个新线程的代价要比创建一个新进程小的多;
·与进程之间的切换相比,线程不需要切换页表,则需要操作系统做的切换工作要少很多;
·线程占用的资源要比进程少很多;
·能充分利用多处理器的可并行数量;
·在等待慢速I/O操作结束的同时,程序可执行其他的计算任务;
·计算密集型应用(使用CPU资源较多),为能在多处理器系统上运行,将计算分解到多个线程中实现;
**·**I/O密集型应用(以传送数据为目的),为提高性能,将I/O操作重叠。线程可以同时等待不同的I/O操作。
六、线程的缺点
·性能损失:若计算密集型线程的数量比可用的处理器多,那么可能会有较大的性能损失,性能损失指的是增加了额外的同步和调度开销,而可用的资源不变;
·健壮性降低:一个线程一旦出现问题,可能会影响其他线程;
·缺乏访问控制:进程是访问控制的基本粒度,在一个线程中调用某些OS函数会对整个进程造成影响;
·编程难度提高:编写调试一个多线程程序比单线程程序困难。

猜你喜欢

转载自blog.csdn.net/weixin_41289858/article/details/81281053