多线程编程(简单讲解)

引入多个进程的目的是什么?

为了实现并发编程

我们进入了多核 CPU 的时代,  程序可以在多个核心上实现. 多进程实现并发编程效果很理想, 但是也有明显的缺点: 效率不高(消耗在申请资源上的) , 进程是资源分配的基本单位.                               创建, 销毁, 调度一个进程消耗时间很多, 如果频繁的进行这种操作, 开销就不能忽视了,为了解决上述问题, 就引入了" 线程 "(Thread ), 也叫做"轻量级进程"

注意:

1> 线程不能独立存在, 要依附于进程(进程包含线程)

2> 进程可以包含一个线程, 也可以包含多个线程

一个进程最开始至少有一个线程, 可以完成负责代码的工作, 也能根据需要创建出更多的线程, 实现" 并发编程 "的效果, 每个线程都可以独立地执行一些代码.

其中一个进程可能使用一个PCB表示, 也可能使用多个PCB表示, 每个PCB对应到一个线程上, 其中的pid, 内存指针, 文件描述符表, 共用同一份.

上述结构决定线程的特点:

1> 每个线程都可以独立地去CPU调度执行

2> 同一个进程的多个线程之间, 共用同一份内存空间和文件资源(创建线程的时候不需要重新申请资源了, 直接复用之前已经分配个进程的资源, 省去了资源分配的开销, 创建效率跟更高.)

总结:进程中包含线程,  一个进程有多个PCB共同表示, 每个PCB就用来表示一个线程, 每个线程都有自己的状态, 上下文, 优先级, 记账信息, 每个线程都可以独立地去CPU上调度执行, 这些PCB共用了同样的内存指针和文件描述符表, 创建线程PCB不需要申请资源, 创建/销毁的效率更高了.

线程是调度执行的基本单位.

注意: 当增加的线程数目过多时

1> 使调度的开销更大, 反而降低效率

2> 可能会产生一定的冲突, 成为线程不安全问题.

3> 一个线程抛出异常, 如果没有妥善处理, 容易整个进程崩溃, 需要 catch 住

线程和进程的区别:

1> 进程包含线程, 一个进程里面有一个线程, 也可能有多个线程.

2> 进程和线程都是用来实现 并发编程 场景的, 但是线程更轻量, 更高效

3> 同一个进程的线程之间, 共用了一份资源(内存+硬盘), 省去了申请资源的开销

4> 进程和进程之间具有独立性, 一个进程挂了, 不会影响到别人, 线程和线程之间(同一个进程内), 会互相影响.

5> 进程是资源分配的基本单位, 线程是调度执行的基本单位.

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值