Scala의 미래 시퀀스

Suraj P 2023년6월21일
  1. Scala에서 순차적으로 Futures 실행
  2. Scala에서 퓨처의 동시/병렬 실행
  3. 결론
Scala의 미래 시퀀스

이번 글에서는 Scala의 futures에 대해 알아보겠습니다.

Scala에서 Future는 현재 사용할 수 없지만 미래에 사용할 수 있는 값입니다.

Scala에서 동시에/병렬로 작업을 실행하려는 경우 Futures를 사용합니다. 기본 Java 스레드를 사용할 수 있지만 Scala Future가 훨씬 작성하기 쉽기 때문에 선호됩니다.

간단히 말해서 Future는 알고리즘/응용 프로그램을 동시에 실행하는 간단한 방법을 제공합니다. 퓨처가 생성되면 동시에 실행되기 시작하고 결과를 얻을 수 있는 특정 시점에서 결과를 제공합니다.

Scala에서 순차적으로 Futures 실행

미래가 순차적으로 실행되기 시작하면 순차적 실행입니다. 스레드 풀을 관리하는 ExecutionContext를 가져와야 합니다. 그것 없이는 미래가 실행되지 않습니다.

더 잘 이해하기 위해 예를 살펴보겠습니다.

Note
온라인 컴파일러가 아닌 로컬 IDE에서 아래 코드를 실행하여 제대로 실행되는지 확인하고 차이점을 확인하십시오.
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future

object Example extends App {

  def task(n: Int) = Future
  {
    Thread.sleep(1000)
    println(n)  //to observe the output
    n + 1
  }

//running in a sequential way
  val temp = for {
    t1 <- task(1)
    t2 <- task(t1)
    t3 <- task(t2)
    t4 <- task(t3)
    t5 <- task(t4)
  } yield List(t1,t2,t3,t4,t5)
  temp.map(x => println(s"Completed. ${x.size} tasks were executed"))
  Thread.sleep(5000) //so that the main thread doesn't quit quickly
}

코드를 실행하면 5개의 작업이 차례로 실행되는 것을 볼 수 있습니다.

Scala에서 순차적으로 Future 실행

Scala에서 퓨처의 동시/병렬 실행

예제 코드:

import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future

object Example extends App {

  def task(n: Int) = Future
  {
    Thread.sleep(1000)
    println(n)  //to observe the output
    n + 1
  }

  val temp = for {
    t1 <- task(1)
    t2 <- Future.sequence(List(task(t1), task(t1)))
    t3 <- task(t2.head)
    t4 <- Future.sequence(List(task(t3), task(t3)))
    t5 <- task(t4.head)
  } yield t2.size + t4.size
  temp.foreach(x => println(s"Done. $x task run in concurrent manner"))
  Thread.sleep(6000) // needed to prevent the main thread from quitting
  // too early
}

위의 코드에서 우리는 Future.sequence를 사용했는데, 이는 list of futures를 가져와 future of list로 변환합니다. 동시에 실행하려는 모든 작업/작업은 목록으로 전달되어야 합니다.

출력:

Scala에서 Future의 동시 실행

위의 코드를 실행하면 t2t4가 병렬로 실행되는 것을 볼 수 있습니다. 병렬 처리로 작업하는 동안 기억해야 할 한 가지는 스레드의 가용성에 따라 실행이 항상 병렬이 아닐 수 있다는 것입니다.

몇 개의 스레드만 있는 경우 다른 작업이 스레드가 해제되기를 기다리는 동안 몇 개의 작업만 병렬로 실행됩니다.

결론

이 튜토리얼에서 우리는 Futures가 무엇이고 프로그램을 동시에 작성하고 실행하는 데 어떻게 유용한지 이해했습니다.

작가: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub