【问题标题】:Is it possible to achieve the same efficiency of Coroutines but with Java?是否可以使用 Java 实现与 Coroutines 相同的效率?
【发布时间】:2020-12-31 20:17:32
【问题描述】:

我今天接受了采访。有人问我为什么 Kotlin 更好,我提到了 ,使用 Kotlin 我们有协程,这使得执行繁重的操作变得更容易和更好,但是使用 Threads(Java),如果同时创建和运行许多线程它可能会导致内存不足的问题。 他回答说,Java 中的线程也可以这样做。 我是一名初级开发人员,我最近切换到了 kotlin,所以我对此的了解有限,我在互联网上找不到更多相同的信息。有人可以帮忙吗?

【问题讨论】:

  • 协程使用挂起函数的思想,在JVM上使用状态机。它不直接绑定到线程(协程中的调度程序)。没有办法消除“繁重”操作 - 无论如何都会发生线程阻塞。 Kotlin 将协程宣传为内联使用回调的绝妙方式,并且不直接将其与线程绑定 - 但在 99.9% 的用例中,回调通常是因为异步操作(如网络调用),无论如何您都将使用线程。面试官指的是线程池和执行器,就像协程使用的一样,即 Dispatchers.IO
  • 您究竟想要什么“效率”?
  • 协程的主要优势在于,您必须在 Java 中使用 lambda 面向函数的 API(回调)来执行此操作,而使用协程,您可以继续以常规的顺序编程风格进行操作。请注意,当 Project Loom 成为 Java 的一部分时,它将比 Kotlin 协程更简单。

标签: android multithreading kotlin kotlin-coroutines


【解决方案1】:

您可以用协程做的所有事情都可以在 Java 中完成。协程不是魔术。他们正在做你可以用手做的事情。

在纯 Java 中获得相同的正确性、简洁性和性能要困难得多。与您必须用等效的 Java 编写的内容相比,协程使完成所有这些事情变得轻松。协程不会让任何新事物成为可能,它们只是让构建和维护变得更容易。

【讨论】:

    【解决方案2】:

    协程比生成许多线程执行得更好,因为它们在后台使用线程池,但线程池在纯 Java(执行程序)中可用。 Kotlin 文档将协程称为“轻量级线程”,但实际上它们是从借用的线程中拼凑而成的。它们比每个任务使用一个线程更轻,是的。

    协程相对于 Java 的优势在于使用它们的直观语法。 Java 需要一种回调方法,这会导致嵌套块和代码的编写顺序与其执行顺序不同。

    【讨论】:

      猜你喜欢
      • 2013-12-26
      • 2013-01-22
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      相关资源
      最近更新 更多