C++多线程基础

一、C++多线程基础

多线程编程一直以来都是编程领域里面的难点,要掌握多线程编程需要坚实的编程基础以及对一些基础概念有透彻的理解,接下来我就跟大家一起来回顾一下。

什么是线程?

线程是操作系统能够进行运算和调度的最小单位,是一个进程里面实际进行运作的单位,也就是实际任务的执行者,通常一个进程至少包含一个线程,也就是主线程。
打个比方,我们的程序加载到内存以后,以进程为主体,这个进程就好比一个生产工厂,它里面包含了操作系统给我们分配的各种资源例如:机器设备、材料、操作台等,但工厂不具体做事情,工厂里面的工人负责具体的生产任务,工人在这个地方就相当于程序里面的线程。

总结下来有几点:

  1. 线程是操作系统调度的最小单位。
  2. 线程负责具体任务的执行。
  3. 线程依赖于进程,不能单独存在,每个进程至少有一个线程。
  4. 每个线程之间相互“独立”。

为什么需要多线程?

假设我们的程序都是单线程的,回到刚才那个工厂的例子,也就是说工厂里面负责干活的工人只有一个,那么我们的生产任务永远不可能同时有多个任务并行执行,任务总是一个接一个的由同一个工人完成。但是如果我们有10个工人呢,这个时候我们的生产任务就能够合理的分配给10个工人,10个工人可以同时进行任务生产,我们的生产效率明显提高了。
简单来说,现实情况下我们有很多场景都是需要多任务同时执行的,比如一个电影播放器需要一边播放视频同时一边播放音频,打印机打印的时候需要同时显示打印进度等等,这些都需要多个任务并行执行,在程序里面这就需要多线程的支持,单线程是没办法完成这类任务的。

并发和并行是一样的么?

说到多线程,那么一定会涉及到并发和并行的概念,这两个概念很容易混淆,并发通常指的是两件事情几乎同时发生,但不一定是同时在进行,而并行强调的是同时进行。在单核的cpu时代,多任务的计算机实际上并不是真正的同时处理多个任务,而是通过多个cpu时间分片,任务快速切换,给人以同时在执行多个任务的感觉。而到了多核心cpu的时代,多个任务如果分配在不同的cpu核心上就能够真正独立的并行执行,所以这两个概念有重叠,但是不完全相同。
对多线程程序来说,如果是运行在多核心的cpu上那么就可能实现真正意义上的多个线程并行执行,而在单个cpu核心上只能是并发执行,由cpu调度切换。

理解了以上的基础概念以后,我们就知道线程并不是越多越好,线程本身的切换也是需要消耗cpu的调度时间的,一个程序里面的线程的合适数量需要取决于硬件条件和实际的应用场景。

多线程问题

引入了多线程多概念以后,核心的问题就是共享资源的竞争问题。如果说每个线程的资源都是自己独享的话,那么多线程的复杂性就下降很多,现实情况是程序里面有很多的资源属于共享资源,多个线程都要进行访问的话就需要竞争,所以不可避地带来资源锁的问题。
为了解决资源竞争的问题,就引入了锁机制,信号机制等同步机制,以保证资源访问的合理和安全,这块作为重点在后续同步c++相关的讲解。

这一节我们一起回顾了多线程的一些基础概念,并没有太细化和深入,目的在于让大家对多线程有个形象的理解。
下一节,我们将开始以实际的c++程序,开启多线程编程的大门。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值