浅谈JAVA并发(并行)编程:1、先了解点概念
背景
闲来无事,最近整理并学习下JAVA并发(并行)编程,试着把原来自己感觉的概念理顺起来。
进程&线程
这里就不多说了,有兴趣去重温下大学的课程
多线程实现并发(并行)能力
有了线程的概念,由此我们可以引入多线程实现并发(并行)处理能力,这里所说的并发(并行)处理能力再操作系统级别下大概是这样的:
- 并发&并行
- 并发:
当多个线程在操作的时候,如果系统只有一个CPU,同一时刻就只有一条线程指令在执行,但是各个线程指令被快速的轮换执行,这就是的宏观上看起来是多个线程在同时执行。
但微观上并不是这样,只是将时间分成若干个片段,多个线程交替执行。 如图系统只有1个CPU,线程就要通过竞争得到执行机会。谁得到CPU谁就执行。
- 并行:
如果系统有1个以上的CPU,则系统的线程有可能非并发而是并行。当一个CPU执行一个线程时,另一个CPU也在执行另外的线程,两个线程互不争夺CPU资源,可以同时进行,这就
称为并行。这就是和并发不同之处,同一时刻线程指令都在执行。
- 并发:
- 这里所说的并发(并行)处理能力指同时处理多任务的能力,提高CPU的利用率,换取任务的快速处理。
至于多线程实现的究竟是并发还是并行?前面两点提到的说明这是都有可能的。因为多线程可能被分配到一个CPU内核执行,也可能被分配到不同的CPU资源中执行。然而这个过程是操作系统干的,不关我的事。所以我也不确定最后究竟是并发还是并行。
同步&异步
任务的发起方式:同步、异步
-
同步:同步是指一个进程在执行某个请求的时候,如果该请求需要一段时间才能返回信息,那么这个进程会一直等待下去,直到收到返回信息才继续执行下去。
-
异步:异步是指进程不需要一直等待下去,而是继续执行下面的操作,不管其他进程的状态,当有信息返回的时候会通知进程进行处理,这样就可以提高执行的效率了,即异步是我们发出的一个请求,该请求会在后台自动发出并获取数据,然后对数据进行处理,在此过程中,我们可以继续做其他操作,不管它怎么发出请求,不关心它怎么处理数据。
-
总结得来说,同步和异步的本质区别是是否需要等待,比如一个方法在执行,必须等前面一个方法程执行完成,才可以执行,这就是同步。如果不需要等上一个方法执行完成,并行或者并发执行,这就是异步调用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!