前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >并发编程学习思考-如何学习并发编程?

并发编程学习思考-如何学习并发编程?

作者头像
颍川
发布2021-12-06 15:54:27
4390
发布2021-12-06 15:54:27
举报
文章被收录于专栏:颍川颍川

什么是并发

并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

并发编程的优点,我们为什么需要它

并发可以带来性能上的提升

  • 提升对CPU的使用效率

提升访问I/O时CPU的利用率:当一个线程要在网上下载一些东西的时候,这个线程将处于阻塞状态,这时CPU就不会再为这个线程分配CPU时间了,而其他进程可以不受任何影响地获得CPU时间。反过来如果没有使用并发,当前面的指令申请I/O资源的时候,整个进程就被挂起了,即使CPU处于空闲状态后面的指令也不能被执行。

  • 降低系统的响应时间

并发编程缺点

  1. 并发代码容易出错,不好调试,很容易产生概率性的、难以复现的Bug
  2. 线程有创建和上下文切换的开销(实验表明,当并发执行累加操作不超过百万次时,速度会比串行执行累加操作要慢)

什么是并发编程

并发编程领域可以抽象成三个核心问题:分工、同步和互斥

  • 分工

从性能角度讲,我们为了提高执行一定计算机任务的效率,所以IO等待的时候不能让cpu闲着,所以我们把任务拆分交替执行,有了分时操作系统,出现了并发,后来cpu多核了又有了并行计算。

  • 同步 分工以后我们为了进一步提升效率和更加灵活地达到目的,所以我们要对任务进行组织编排,也就是对线程组织编排。于是线程之间需要通信,于是操作系统提供了一些让进程,线程之间通信的方式。
  • 互斥

但是事物总不是完美的。并发和通信带来了较高的编程复杂度,同时也出现了多线程并发操作共享资源的问题。于是天下大势,分久必合,我们又要将对共享资源的访问串行化。所以我们根据现实世界的做法设计了了锁,信号量等等来补充这套体系

总结起来就是,并发编程本质是分工工作(多线程),因为分工工作带来了通信问题(不同线程之间通信),通信带来了安全问题(Java多线程通信使用的是共享变量模型),为了解决通信带来的安全性问题,我们引入了互斥

如何学好并发编程

  • 方法论层面:
  1. 「跳出来,看全景」三个核心问题:分工、同步和互斥
  2. 「钻进去,看本质」JSR-133
  • 构建并发领域全景图 稍微了解过并发领域知识的人都知道,里面的知识点、概念多而散:线程安全、锁、同步、异步、阻塞、非阻塞、死锁、队列(为什么并发要跟队列扯上关系)、闭锁、信号量、活锁等等。如果单个去学这些知识点,单个去练习,如果没有「主线」,后期很容易忘,所以需要有一条主线,俗话说的好,做每件事情都是由点到线由线到面.
  • 性能 什么是并发的核心点那,我们回顾一下我上面的问题,为什么需要并发,答案是:并发可以带来[性能]上的提升,所以现在我们并发只需要想两个字 [性能],其它的细节,再去慢慢拓展
  • 分工|任务
  1. 并发本质是 cpu 在快速的进行时间片切换,每个时间片对应着执行的[任务]
  2. 并发编程就是对任务的抽象、拆解、分工执行,我们Java程序员熟悉的线程模型,只是其中的一种模型,还有多进程、协程。Java使用的是多线程模型,对应到具体的代码就是:Thread,Runnable,Task,执行任务有:Exectors
  • 协作|通信| 互斥 引出了线程,我们势必存在着多线程通信问题,多个线程操作同一个变量造成的安全性问题如何解决那?,也不难想到,锁是非常直接的方式(Monitor原理),
  • 思考| 扩展 但是只用锁,势必会造成性能损耗,也违背了我们并发的本质[性能],所以如果一遇到并发问题,就直接上锁,倒也没有什么大问题,可是追求性能是人类的天性。计算机大师就在思考.能不不加锁也能实现并发.还不容易出错,于是就有了:CAS、copy-on-write等技术思想,这就是实现了「无锁」并发;
  • 统一模型 通过思考我们发现 如果要实现一个好的并发编程,我们需要思考和准备很多东西,如果以上这些个东西,都需要每个程序员自己去弄.然后自己保证正确性,那程序员真累死了,哪还有时间、精力创造这么多美好的应用!于是,计算机大师又开始思考,能不能抽象出统一「模型」,可能这就有了类似于「Java内存模型」(JSR-133)这样的东西
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/05/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 并发编程的优点,我们为什么需要它
  • 并发编程缺点
  • 什么是并发编程
  • 如何学好并发编程
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于生成式AI,自动驾驶,深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档