- 何为并发
- 并发的两种方式
- 并发途径(实现选择)
- 多进程
- 单进程中多线程
- 比较
- 为什么使用并发
- 关注点分离
- 性能
- 何时不用并发
- 总结
并发是指两个或更多独立的活动同时发生,在计算机领域,并发指的是在单系统内同时执行多个任务
并发的两种方式单核CPU的并发与多核CPU的并发不同,前者是通过在多个任务之间快速切换实现假并发,多核则是硬件并发,多个任务同时执行。任务上下文切换在这两种场景下有微妙的不同
并发途径(实现选择) 多进程进程间传递数据通过信号、套接字、文件、管道等方式,缺点:设置复杂、速度慢、开销大。优点: *** 作系统在进程间提供附加的保护 *** 作和更高级别的通信机制,意味着可以更容易编写安全的并发代码;可以使用远程连接(可能需要联网)的方式,在不同的机器上运行独立的进程。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-91BJwn6k-1636174122806)(vx_images/3239854101147.png)]
进程中的所有线程都共享地址空间——全局变量仍然是全局的,指针、对象的引用或数据可以在线程之间传递。地址空间共享以及缺少线程间数据的保护,使得 *** 作系统的记录工作量减小,所以多线程的开销远远小于多进程。共享内存的代价是:如果数据要被多个线程访问,那么程序员必须编写额外的代码确保每个线程所访问到的数据是一致的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RpYb0xpC-1636174122808)(vx_images/4826856119573.png)]
C++标准并未对进程间通信提供任何原生支持,所以使用多进程的方式实现并发会依赖与平台相关的API。如果能编写良好的代码,多线程更有优势
为什么使用并发关注点分离(SOC)和性能,事实上,它们应该是使用并发的唯一原因。
关注点分离所谓关注点分离指的是将功能不同的代码分离,使得程序更加容易理解和测试。
如:DVD播放程序,它具有两个功能:1.解析DVD 2.接受用户输入。如果使用单线程,两者的功能代码将放在一起,程序需要定期检查用户输入并调用相关代码。而使用多线程则代码可以完全分离,只需要增加两个线程间交互的代码即可。
两种方式利用并发提高程序性能:
- 任务并行。将单任务分为多个部分,同时运行
- 数据并行。每个线程在不同的数据部分执行相同的 *** 作,例如图像分割成不同部分进行相同的 *** 作
除非潜在的性能增益足够大或关注点分离地足够清晰,能抵消所需的额外的开发时间以及与维护多线程代码相关的额外成本(代码正确的前提下);否则,勿用并发
总结C++中使用多线程并不复杂,复杂的是如何设计代码以实现其预期的行为
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)