Java并发与并行

并发是指同时执行多项操作的能力。

早在早期,计算机一次只能执行一个程序。但是现在,现代计算机能够同时运行很多任务。例如 -

  • 您可以同时在网络浏览器上浏览我的博客,并在媒体播放器上听音乐

  • 您可以在文字处理器上编辑文档,而其他应用程序可以同时从Internet下载文件

 

并发不一定涉及多个应用程序。同时运行单个应用程序的多个部分也称为并发。例如 -

  • 文字处理器格式的文本和响应键盘事件,同时

  • 音频流应用程序读取来自网络的声音,解压缩并更新显示,所有在同一时间

  • Web服务器,这实质上是在计算机上运行的程序,提供成千上万的请求的来自世界各地的,在同一时间

一次可以执行多项操作的软件称为并发软件。

我的计算机的以下屏幕截图显示了并发示例。我的计算机系统正在同时执行多项操作-它正在媒体播放器上运行视频,在终端上接受键盘输入,并在IntelliJ Idea中构建项目。

 

并发:幕后花絮

好!我了解计算机可以一次运行多个任务,但是它们如何执行呢?

我知道当今的计算机配备有多个处理器,但是在单个处理器系统上也不可能实现并发吗?同样,计算机可以执行的任务数量多于可用处理器的数量。

 

即使在单个CPU上如何同时执行多个任务?

 

好!事实证明,它们实际上并没有在同一物理时刻执行。并发并不意味着并行执行。

当我们说“多个任务同时执行”时,我们的实际意思是“多个任务在同一时间段内正在取得进展”。

任务以交错方式执行。操作系统如此频繁地在任务之间切换,以使用户看起来它们在同一物理时刻被执行。

因此,并发并不意味着并行。实际上,在单个处理器系统上并行是不可能的。

并发与并行

并发是指多个流程在重叠的时间段内取得进展。并发的一个例子是,单个发牌人将一副牌洗牌,然后将其分成两堆。两堆纸牌几乎都实时增长,但是一次只能放置一张纸牌。并发可以给我们一种并行性的错觉,因为两个进程几乎实时地取得了合理的进展,尽管在任何给定时间仅发生一次操作。

alt

并行是指多个进程同时进行。为了在上面的洗牌示例中实现并行性,我们需要添加第二个发牌人和第二个牌组。现在,我们可以将两个交易员将两个牌组洗牌成两个完全平行的独立牌堆。

每堆纸牌的增长速度彼此独立。任何类型的故障都是隔离的,例如,其中一个经销商丢下甲板或以其他方式破坏重新安排过程。一个经销商的业绩和成功不会影响另一经销商。

alt

这构成了讨论,在我们阅读后续材料时应牢记这一点。

 

并发单位

并发是一个非常宽泛的术语,可以在各个级别上使用。例如 -

  • 多处理-多个处理器/ CPU同时执行。并发的单位是CPU。

  • 多任务处理-在单个CPU上同时运行的多个任务/进程。操作系统通过非常频繁地在它们之间切换来执行这些任务。在这种情况下,并发单位是一个流程。

  • 多线程-同一程序的多个部分同时运行。在这种情况下,我们可以更进一步,将同一程序分为多个部分/线程并同时运行这些线程。

进程和线程

让我们来谈谈并发的两个基本单元:进程和线程。

进程

进程是正在执行的程序。它具有自己的地址空间,调用堆栈,并链接到任何资源,例如打开的文件。

一个计算机系统通常一次运行多个进程。操作系统跟踪所有这些进程,并通过在其中共享CPU的处理时间来促进它们的执行。

线程

线程是进程内执行的路径。每个进程都有至少一个线程-称为主线程。主线程可以在流程中创建其他线程。

进程中的线程共享进程的资源,包括内存和打开的文件。但是,每个线程都有其自己的调用堆栈。

 

由于线程共享进程的相同地址空间,因此创建新线程并在它们之间进行通信更加有效。

与并发相关的常见问题

并发通过提高CPU利用率极大地提高了计算机的吞吐量。但是,随着性能的提高,几乎没有问题-

  • 线程干扰错误(种族条件): 当多个线程尝试同时读写共享变量,并且这些读写操作在执行中重叠时,就会发生线程干扰错误。

    在这种情况下,最终结果取决于读取和写入发生的顺序,这是无法预测的。这使得线程干扰错误难以检测和修复。

    通过确保一次只有一个线程可以访问共享资源,可以避免线程干扰错误。通常,这是通过在访问任何共享资源之前获取互斥锁来完成的。

    在访问任何共享资源之前获取锁的概念可能导致其他问题,例如死锁饥饿。我们将在以后的教程中学习这些问题及其解决方案。

  • 内存一致性错误: 当不同线程对同一数据的视图不一致时,将发生内存一致性错误。当一个线程更新某些共享数据,但此更新不会传播到其他线程,并且最终使用旧数据时,会发生这种情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值