线程学习---自我修养

##一、什么是线程

本文主要介绍linux下面的线程。在linux实际上没有线程的概念,实际是进程的变种,被称作轻量级进程(LWP)。线程通常由线程ID、指令指针、寄存器集合和堆栈组成。通常一个进程有多个线程组成,各个线程之间共享程序的内存空间和进程的资源(打开的文件和信号)。一个经典的进程和线程的关系。
在这里插入图片描述

二、线程的权限

线程可以访问进程内存里面的所有数据,甚至包括其他线程的堆栈,单实际线程也有自己的私有存储空间。
在这里插入图片描述

三、线程的调度和优先级

不论在多处理器还是单处理器上面,线程总数“并发”执行的。当线程数量小于处理器数量时,线程并发是真正的并发,反之,线程的并发是模拟出来的并发,操作系统会轮流执行多个线程,每个线程都有一个时间片运行,当时间片运行完,会运行下一个线程,由于速度很快,给人的感觉是多个线程并发执行。线程调度有三种状态:
运行:正在执行的线程
就绪:此时线程可以立即运行,但CPU被占用
等待:线程正在等待某一事件发生,无法执行
在这里插入图片描述线程调度自多任务操作系统出现不断被提出线的方案和算法,最经典的是优先级调度和轮转法。轮转法是让各个线程轮流执行一小段时间。优先级调度是根据线程优先级来判断谁先执行,优先级越高,操作系统优先执行相应的现场。
在优先级调度下,可能存在饿死现象,一个线程被饿死,说他的优先级较低,在执行前,总是有高优先级的现场试图执行,所以这个低优先级的现场是在无法执行。为了避免饿死现象,调度系统会逐步提高等待时间过长的线程,这样一段时间最终这个线程会被执行。

四、linux多线程

linux内核并不存在真正意义的线程概念。linux将所有的执行实体都称为任务,每一个任务类似一个单线程的进程,具有内存空间、执行实体、文件资源等。不过,linux下不同的任务之间可以选择共享内存空间。共享同一内存空间的多个任务构成一个进程,这些任务也构成了进程里的现场。有下面几个方法创建一个新任务。

系统调用作用
fork复制当前进程
exec使用新的可执行镜像替换当前可执行镜像
clone创建子进程并从指定位置执行

五、线程安全

可以参考学习多线程同步方法:
https://blog.csdn.net/yangzai_0551/article/details/112801010

六、线程模型

大多数操作系统,都在内核理提供现场的支持,而用户使用的现场并不是内核现场,而是存在于用户态的用户现场,用户线程并不一定在操作系统内核理对应同等数控的内核线程,所有分下面三种模型:
1.一对一模型
一个用户现场对应一个内核使用的线程
2.多对一模型
3.多对多模型
具体可以参见:
https://kernel.blog.csdn.net/article/details/51892437

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值