线程基本概念

一、线程概念

1.定义

进程:承担分配系统资源的基本单位
(1)线程在进程内部运行→线程在进程地址空间内运行
(2)站在CPU的角度,能否识别task_stryct是进程还是线程?
识别不了,也不需要,CPU只关心一个一个的执行流
(3)该如何理解之前的进程?
进程:内核角度,承担分配系统资源的基本单位
进程:该进程内部只有一个执行流;
线程:该内部有多个执行流,每个执行流是线程;
(4)Linux下,并不存在真正的多线程,提供创建轻量级进程的接口,创建进程,共享空间(vgork():父子共享空间)
普通OS:如果支持真的线程,当线程足够多的时候,OS需要管理线程
是用进程模拟的,Linux中的所有执行流,都叫做轻量级进程
(5)站在用户角度,创建线程,利用原生线程库的方案解决
基于轻量级进程的系统调用,用户在用户层 模拟实现一套线程接口这个库叫做:phtread

补充:
CPU:虚拟地址→物理地址的转化采用软硬件结合的方式进行映射
(1)所有映射过程都是由CPU内的MMU:内存管理单元硬件完成映射的,集成在CPU内
(2)过程:页目录→页表→物理内存(页框)
(3)不是所有的页目录都有映射关系,也就不需要页表
(4)页表:软件映射关系

定义常量字符串,修改字符串会导致程序崩溃原因:
定义的常量字符串是在虚拟内存中的字符常量区,要转换成物理地址,需要映射,在映射中,发现其权限是R,只读,会触发错误中断机制,导致程序崩溃。

2.线程优点

(1)创建一个新线程的代价要比创建一个新进程小得多;
(2)与进程之间的切换相比,线程之间的切换需要OS做的工作要少得多;
(3)线程占用的资源要比进程少很多;
(4)能充分利用多处理器的可并行数量;
(5)计算密集型应用,为了能在多处理器系统上运行,将计算机分解到多个线程中实现;
(6)I/O密集型应用:为了提高性能,将I/O操作重叠,线程可以同时等待不同的I/O操作
计算密集型:执行流的大部分任务,主要以计算为主,如:加密解密,排序查找
I/O密集型:执行流执行的大部分任务,是以IO为主的,如:刷磁盘,访问数据库,访问网络

3.线程缺点

(1)性能损失:指的是增加了额外的同步和调度开销,而可用的资源不变;
(2)健壮性降低:多线程的地址空间是共享的,通过多执行流看到资源有可能是共享的(这些资源是临界资源),会影响线程之间的关系
(3)缺乏访问控制:进程是访问控制的基本粒度,在一个线程中调用某些IO函数会对整个进程造成影响
(4)编程难度提高:多线程的编写难度更高

4.线程异常

(1)单个线程如果出现除零,野指针问题导致线程崩溃,进程也会随着崩溃
(2)线程是进程的执行分支,线程出现异常,就类似进程出异常,进而触发信号机制,终止进程,该进程内的所有线程也就随即退出

二、进程VS线程

1.基本单位

进程是资源分配的基本单位
线程是调度的基本单位(只要调度就需要各自的寄存器进行上下文保存,:线程运行会产生各种临时数据,需要将数据进行压栈)
线程共享进程数据:但也有自己的一部分数据:线程ID、一组寄存器、errno、信号屏蔽字、调度优先级

2.进程的多个线程共享

同一地址空间,代码段、数据段都是共享的,如果定义一个函数,在各线程中都可以调用,如果定义一个全局变量,在各线程中都可以访问到,除此之外,各线程还共享以下进程资源和环境:
a.文件描述符表
b.每种信号的处理方式(SIG_IGN、SIG_DFL或者自己定义的信号处理函数)
c.当前工作目录
d.用户id和组id

3.进程与线程的关系图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值