You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
서브 루틴은 무조건 순차적으로 수행되지만, 코루틴은 함께 수행되며 서로 무제한 양보를 한다. 이를 통해 스레드 자원을 최대한으로 활용 가능하다.
코루틴이 스레드 작업을 최적화하는 방법
JVM 스레드 구조와 다중 Thread 작업의 필요성
하나의 프로세스에는 여러 스레드가 있고, 각 스레드는 독립적으로 작업을 수행한다.
JVM 프로세스는 메인 스레드가 종료되면 강제로 종료되며, JVM 프로세스에 속한 스레드들도 함께 강제로 종료된다.
하지만 메인 스레드가 아닌 다른 스레드들에서는 메인 스레드와 마찬가지로 작업을 수행할 수 있으나, 이 스레드가 종료되더라도 다른 스레드에는 영향을 미치지 않는다. 따라서 메인 스레드에서 많은 부하를 받는 작업을 지양하고, 다른 스레드를 생성해 높은 부하를 주는 작업을 수행해야한다.
기존 다중 스레드 작업 방식
Runnable 인터페이스를 구현한 클래스를 스레드에 넣는 방식
ExecuterService를 이용해 Thread Pool을 구성하는 방식
Rx 라이브러리(Reactive Programming을 돕기 위한 라이브러리)를 이용하는 방식
기존 작업 방식의 문제점
작업 단위가 스레드인데 스레드를 생성하고 전환하는 비용은 비싸다. 또한, 만약 한 스레드가 다른 스레드의 작업을 기다려야하면(Blocking) 해당 스레드는 기다리는 동안 자원이 낭비되는 셈이다.
코루틴이 기존의 문제점을 해결한 방법
코루틴도 작업 단위가 스레드이지만, 스레드 내부에서 작은 스레드처럼 동작하는 것이 코루틴이다. (첫번째 그림 참고)
스레드 하나를 일시 중단 가능한 다중 경량 스레드처럼 활용
만약 한 스레드가 다른 스레드의 작업이 필요하다면, 해당 스레드를 Blocking 하는 대신 코루틴1 작업을 일시 중단하고 코루틴2에 스레드 리소스 사용 권한을 넘겨준다. (Non Blocking)
코루틴(Coroutine)이란?
서브루틴과 차이
코루틴이 스레드 작업을 최적화하는 방법
기존 다중 스레드 작업 방식
기존 작업 방식의 문제점
코루틴이 기존의 문제점을 해결한 방법
Ref.
The text was updated successfully, but these errors were encountered: