Java多线程和并发:破解高级面试

如果您希望成为一名高级软件工程师,那么您可能已经意识到并发概念的重要性。 随着多核计算机普及率的迅速提高,当今大多数科技公司都迫切希望能够熟练地导航其复杂性的工程师。

并发问题通常是将高级工程师与初级工程师区分开的面试晴雨表,在某些情况下,这可能意味着数十万美元的补偿金的差异。 显然,认真对待自己的软件工程职业发展的应聘者应对此领域有扎实的掌握。

为了满足这一需求,我们与著名的软件工程师C.H. Afzal将创建一门全面的课程,指导学习者完成高级工程访谈中与并发相关的问题所需的全部知识。

Check out Java Multithreading and Concurrency for Senior Engineering Interviews.

What is multithreading and why does it exist?

解释此问题的最简单方法是考虑具有单个处理器的机器如何计算简单的多步数学计算问题。 让我们考虑以下功能:

((3 + 2)*(6 + 4));

收到此指令后,计算机可以理解的是:

首先,找到(3 + 2)然后找到(6 + 4)最后,将结果彼此相乘

如果我们假设这些步骤中的每一个都恰好花费1个时间单位,那么上述操作将以3个时间单位完成。

但是,如果两个线程可以同时运行怎么办? 在这种情况下,两个加法问题可以由不同的处理器同时处理,然后一旦发现结果,便彼此相乘。 在这种极其简化的方案中,以前只需要3个时间单位的相同计算将仅用2个时间单位完成-节省了33%。

Alt Text

举一个更实际的例子:如果处理器要执行一条需要从内存中提取数据的指令,通常将需要一定数量的时钟周期—假定它需要5个时钟。在这种情况下,下一条指令无法立即开始 请使用该值,因为还没有从内存中“拉出”该值超过5个时钟周期。 在这种情况下,多线程处理器可以同时开始处理来自另一个进程的指令。 实际上,从理论上讲,它可以使用这5个时钟周期来执行5个不同进程中的5个不同任务。

这样,给定处理器上的多线程可以使错觉即使在任何时间点,CPU实际上仅执行一个线程,也可以为用户提供多任务处理功能。 当您将在单个处理器上具有这种“伪”多任务的能力与多个处理器的实际可用性相结合时,无数个进程可以同时无缝运行。

Benefits of multithreading

  1. 更高的吞吐量,或在给定的时间内处理更多单位信息的能力。 (这假设与处理多个线程相关联的吞吐量“成本”低于其创建的效率。通常,但并非总是如此)。响应速度更快的应用为用户提供无缝体验和多任务处理的错觉。 例如,即使在图像处理应用程序的后台发生IO活动时,应用程序的UI仍然可以正常工作并具有响应能力。更有效地利用资源。一般而言,与创建全新流程相比,线程创建的“成本”更低。 响应Web请求时,使用线程而不是创建新进程的Web服务器消耗的资源要少得多。

Problems with Multithreading

  1. 更难发现错误。流程未成功执行的原因现在可能是流程本身的外部原因。 线程的执行顺序和优先级并非总是可以预测的,而取决于操作系统本身。代码维护成本更高,因为代码现在已添加了多个级别的复杂性。对系统的更多需求。 每个线程的创建会占用额外的内存,用于记账的CPU周期以及切换“上下文”所花费的时间。另外,请记住,如果处理器要同时运行5个线程,则还需要保留有关每个线程的信息。 在其他进程执行时周围的进程可以访问,需要更多的寄存器。

The limitations of concurrency

没有提到阿姆达尔定律,关于多线程的文字是不完整的。 该法律规定,将程序的执行拆分为并行线程时,始终可以实现最大的加速。

想想这个例子:一个女人也许可以在9个月内生下一个婴儿,但这并不意味着有9个女人可以在1个月内生下一个婴儿。

同样,即使处理器数量增加,软件程序也将始终包含无法加速的部分。 程序的这些部分必须串行执行,并且不能通过运行并行线程来加快执行速度。

阿姆达尔定律描述了程序通过使用其他计算资源最多可以达到的理论极限:

Alt Text

  • S(n)是通过使用n个内核或线程实现的加速。P是程序中可并行化的部分。(1 — P)是程序中必须串行执行的部分。

Example:

假设我们的程序具有可并行化的部分P = 90%= 0.9。 现在让我们看一下如何随着进程数量的增加而加速:

Alt Text

随着我们增加处理器或线程数量,速度提高了。 但是,串行执行10%的程序在理论上的最大加速将永远是10。与在单个CPU或线程上运行相同程序相比,我们无法将程序执行速度提高10倍以上。 为了实现大于10的加速,我们必须优化或并行执行代码的串行执行部分。

还要注意,当我们通过使用10个处理器将程序执行速度提高大约5倍时,由于这10个处理器将在单个处理器剩余的时间内保持空闲状态,因此这10个处理器的利用率也大约降低了50% 一直很忙。 因此,通过增加处理器数量来增加吞吐量也可能导致资源利用效率降低。

Master concurrency by practicing real problems

Some example questions

  1. 您将如何设计一个不能同时容纳不同性别的人或同一时间最多容纳3个人的男女通用浴室?您将如何解决这样的情况:一个圆桌会议上有5位哲学家在吃饭,而每位哲学家每只手都需要一个叉子才能吃饭,但是只有5个叉子在场?

Alt Text

To get practice with these problems in embedded coding environments, check out Java Multithreading and Concurrency for Senior Engineering Interviews on Educative.

Additional Resources

from: https://dev.to//educative/java-multithreading-concurrency-cracking-senior-interviews-4007

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值