Linux系统编程_课时66_线程

课时66_线程

1、创建线程

创建线程后,地址空间没有变化,进程退化成了线程,即主线程。
创建出的子线程和主线程公用地址空间。
主线程和子线程有各自的pcb(进程控制块),子线程的pcb是从主线程拷贝而来。

线程创建示意图

2、用户区独立与共享

用户区哪些是线程共用的?哪些是线程不共用的?

2.1、用户区包括哪些内容

(1).text:代码段
(2).bss:未初始化的全局变量
(3).data:初始化的全局变量
(4)动态库加载区
(5)环境变量
(6)命令行参数
(7)堆
(8)栈

2.2、用户区共享内容

除栈外,其他为共享资源。
那么,线程之间通信可以使用:全局变量、堆。
(1).text:代码段
(2).bss:未初始化的全局变量
(3).data:初始化的全局变量
(4)动态库加载区
(5)环境变量
(6)命令行参数
(7)堆

2.3、用户区不共享内容

(8)栈
假设一共5个线程,地址空间中栈被平均分成5份,即stack size 8192kb被平均分成5份。

enspire@Ubuntu18:~$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7639
max locked memory       (kbytes, -l) 16384
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7639
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

3、线程与进程

在Linux下:
(1)线程就是进程-轻量级进程
(2)对于内核来说,线程就是进程(内核只看pcb)
查看指定线程的LWP号:
(1)线程号和线程ID是有区别的
(2)线程号是给内核看的
(3)查看方式:
步骤1:ps aux找到进程的ID,即pid
步骤2:ps -Lf pid

4、多线程与多进程区别

一个单独的进程可以看做线程。

4.1、多进程始终共享的资源

(1)代码
(2)文件描述符(例如管道的实现)
(3)内存映射区(mmap创建)

4.2、多线程始终共享的资源

(1)堆
(2)全局变量

4.3、多线程比多进程节省资源

4.4、多线程没有降低效率

内核分配时间碎片是根据pcb分配,多线程中每个线程有各自的pcb,从这个角度分析不会降低效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值