[Linux系统编程] 线程

一.线程与进程的区别

进程:有独立的 进程地址空间,有独立的pcb,是CPU分配资源的最小单位。
线程:没有独立的进程地址空间,有独立的pcb。是CPU执行的最小单位

在LInux系统中,使用命令 ps-Lf 进程id 可以查看某个进程所拥有的线程
LWP即为线程号。

二.Linux内核线程实现原理

在这里插入图片描述虽然线程与子进程都有自己独立的PCB,但是线程与子进程不同:
线程的pcb中,与它属于的那个进程具有相同的三级映射结构(三级页表),这表示在将地址空间映射到内存时,线程和它属于的那个进程会映射到同一块内存区域。
子进程的pcb与父进程不同,它有独立的三级页表,那么在进程地址空间经mmu映射时,会映射到一块不同于父进程的内存地址。

映射原理图
在这里插入图片描述

三.线程之间的共享/非共享资源

线程共享资源
1.文件描述符表 (方便通信)
2.每种信号的处理方式
3.当前工作目录、
4.用户 ID 和组 ID.
5.内存地址空间(.text/.data/.bss/heap/共享库) --------栈区(stack)不共享,因为线程本身就做由寄存器和栈组成,一个进程地址空间的栈分成多个线程,各线程之间有不同的栈区空间)

线程非共享资源
1.线程 id
2.处理器现场和栈指针(内核栈)
3.独立的栈空间(用户空间栈)
4.errno 变量。
5.信号屏蔽字。
6.调度优先级

线程优、缺点

优点:
1.提高程序并发性
2.开销小
3.数据通信、共享数据方便,
缺点:
1.库函数,不稳定
2.调试、编写困难、gdb不支持
3.对信号支持不好,优点相对突出,缺点均不是硬伤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值