C++-并发相关概念基础

何为并发

并发是指两个或更多独立的活动同时发生,在计算机领域,并发指的是在单系统内同时执行多个任务

并发的两种方式

单核CPU的并发与多核CPU的并发不同,前者是通过在多个任务之间快速切换实现假并发,多核则是硬件并发,多个任务同时执行。任务上下文切换在这两种场景下有微妙的不同

并发途径(实现选择)

多进程

进程间传递数据通过信号、套接字、文件、管道等方式,缺点:设置复杂、速度慢、开销大。优点:操作系统在进程间提供附加的保护操作和更高级别的通信机制,意味着可以更容易编写安全的并发代码;可以使用远程连接(可能需要联网)的方式,在不同的机器上运行独立的进程。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-91BJwn6k-1636174122806)(vx_images/3239854101147.png)]

单进程中多线程

进程中的所有线程都共享地址空间——全局变量仍然是全局的,指针、对象的引用或数据可以在线程之间传递。地址空间共享以及缺少线程间数据的保护,使得操作系统的记录工作量减小,所以多线程的开销远远小于多进程。共享内存的代价是:如果数据要被多个线程访问,那么程序员必须编写额外的代码确保每个线程所访问到的数据是一致的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RpYb0xpC-1636174122808)(vx_images/4826856119573.png)]

比较

C++标准并未对进程间通信提供任何原生支持,所以使用多进程的方式实现并发会依赖与平台相关的API。如果能编写良好的代码,多线程更有优势

为什么使用并发

关注点分离(SOC)和性能,事实上,它们应该是使用并发的唯一原因。

关注点分离

所谓关注点分离指的是将功能不同的代码分离,使得程序更加容易理解和测试。
如:DVD播放程序,它具有两个功能:1.解析DVD 2.接受用户输入。如果使用单线程,两者的功能代码将放在一起,程序需要定期检查用户输入并调用相关代码。而使用多线程则代码可以完全分离,只需要增加两个线程间交互的代码即可。

性能

两种方式利用并发提高程序性能:

  1. 任务并行。将单任务分为多个部分,同时运行
  2. 数据并行。每个线程在不同的数据部分执行相同的操作,例如图像分割成不同部分进行相同的操作

何时不用并发

除非潜在的性能增益足够大或关注点分离地足够清晰,能抵消所需的额外的开发时间以及与维护多线程代码相关的额外成本(代码正确的前提下);否则,勿用并发

总结

C++中使用多线程并不复杂,复杂的是如何设计代码以实现其预期的行为

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mrbone11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值