创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥Linux系列专栏:Linux基础 🔥给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
一、线程的概念
线程是操作系统能够进行调度和执行的最小单位。它是进程内执行的一个独立单元,与同一进程中的其他线程共享进程的地址空间和系统资源。
线程能减少程序在并发执行时所付出的时空开销,使操作系统具有更好的并发性。
二、线程和进程
一般情况下进程包含线程,线程比进程更轻量(体积更小,开销更小)
进程是最小的分配资源单位,线程是最小的调度单位
线程不分配内存,线程创建于进程中,与进程共享资源,访问进程的内存,完成特定任务
类 Unix 系统中,早期是没有“线程”概念的,80 年代才引入,借助进程机制实现出了线程的概念。因此在这类系统中,进程和线程关系密切
轻量级进程(light-weight process)也有 PCB,创建线程使用的底层函数和进程一样,都是 clone
从内核里看进程和线程是一样的,都有各自不同的 PCB,但是 PCB 中指向内存资源的三级页表是相同的
进程可以退化成线程
线程可看做寄存器和栈的集合,线程可以占用时间片使用cpu,可以通过保存和恢复处理器现场避免寄存器冲突,所以线程是一个合格的调度单位。
在 linux下,线程最是小的执行单位;进程是最小的分配资源单位
多线程可以共享资源,减少内存开销
进程退化
如果进程中创建了新的线程,那么进程原本的执行单元成为主控线程,新创建的成为普通线程,便于区分和理解。
线程分为内核级线程KLT和用户级线程ULT
cpu会给每个内核级线程分配内核对象,与进程一样获取cpu
- 优点:内核级线程可以得到更多的系统资源,缩短任务完成时间
- 缺点:所有的线程资源分配、访问和上下文切换都需要系统干预,开销较大
系统无法识别用户级线程,无法将资源分发给普通线程,只会给用户级进程
普通线程虽然无法直接被系统分发资源,但是可以使用cpu(可以主线程sleep(0)放弃时间片,给同进程下的普通进程时间片)
优点:用户级线程的创建、撤销和切换与OS内核无关,由用户空间中的线程库完成,系统调度开销小
多个线程在进程中共享资源有哪些?
- 1.全局变量
- 2.文件描述符
- 3.PCB
- 4.堆空间
- 5.信号处理行为
非共享资源:
- 1.线程栈
- 2.TCB
- 3.优先级指针·
- 4.信号屏蔽字
- 5.errno全局变量
二、线程函数
创建线程
int pthread_create