写点什么

并发与并行

用户头像
ES_her0
关注
发布于: 2021 年 02 月 28 日

这是两个经常听到的词汇,正好最近在读相关的书籍,在此分享一下认知。

方法论

从方法论上说,他们是处理问题不同的方式。之前在我的认知中曾粗略的以为并行是高级的并发,其实不是,他们甚至不是为了解决同一个问题。

  • 并发是问题域

并发解决的是多个线程竞争资源而出现的问题,作为系统设计者并不想发生这样的问题。并发程序往往效率并不如单线程的串型程序,因为往往涉及锁等比较复杂的操作,而且代码维护也相对困难。

  • 并行是方法域

并行利用多核的优势,面对一个大的对象或者数据,将它分解,将它拆分成小问题,进而提升执行效率,代码也相对更简洁清晰。

时序

并发程序的时序是难以保证且不确定的,如果在细节的并发控制上没有做好锁或者隔离,可能就会产生不符预期的结果。

并行程序的执行相互隔离,时序是确定的,执行结果也完全可以确定,有时候只是性能的差异。

选择

并行看起来可能很好,但也不是万能的。但有些原则是必须遵守的:

  • 选择合适的模型,是否存在并发?并行计算后最后的组合成本是不是比串型还高?

  • 解决问题的同时,写出可读的代码

最后有句话送给大家:并发程序中如果某件事可能会发生,无论多难它一定会发生,而且可能在最不利的时刻。并发是不确定的,代码也是不确定的,不要心存侥幸!

用户头像

ES_her0

关注

还未添加个人签名 2018.03.21 加入

还未添加个人简介

评论

发布
暂无评论
并发与并行