[인프런] 2시간으로 끝내는 코루틴 - 1~2강 정리

안녕하세요, 해을입니다🦖

코루틴 복습 차원에서 인프런 강의 중 ‘2시간으로 끝내는 코루틴’ 강의를 수강하게 되었는데요.

이번 글에서는 코루틴 기초 섹션 내 1~2강내용을 정리해보겠습니다!

💡1강. 루틴과 코루틴

🍀 정의

  • routine

    컴퓨터 공학에서 말하는 루틴은 간단히 말해 함수

  • co-routine

    co는 ‘협력하는’이라는 뜻으로, 서로 협력하며 실행을 주고받을 수 있는 루틴(함수)

🥨 루틴 예시

fun main() {
    println("START")
    newRoutine()
    println("END")
}

fun newRoutine() {
    val num1 = 1
    val num2 = 2
    println("${num1 + num2}")
}
START
3
END
  • 루틴은 진입 지점이 하나
  • 루틴이 종료되면 해당 루틴에서 사용하던 지역 정보는 모두 사라짐

🥨 코루틴 예시

fun main(): Unit = runBlocking {
    println("START")
    launch {
    newRoutine()
    }
    yield()
    println("END")
}
suspend fun newRoutine() {
    val num1 = 1
    val num2 = 2
    yield()
    println("${num1 + num2}")
}
START
END
3
  • 코루틴은 상황에 따라 중단과 재개가 일어남
  • 완전히 종료되기 전까지는 사용했던 정보가 메모리에서 제거되지 않음

🍀 코루틴 사용하기

🥨 의존성 추가

dependencies { 
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2") 
}

🥨 코루틴 함수

  • runBlocking

    새로운 코루틴을 만드는 함수, 일반 함수와 코루틴을 연결하는 함수

  • launch

    새로운 코루틴을 만드는 함수, 주로 반환 값이 없는 코루틴을 만드는데 사용

  • yield()

    지금 코루틴의 실행을 잠시 멈추고 다른 코루틴이 실행되도록 양보

  • suspend fun

    다른 suspend fun을 호출 가능

🥨 루틴과 코루틴의 차이

루틴

  • 실행되면 끝날 때까지 멈추지 않음
  • 종료되면 루틴 내부 상태는 모두 사라짐

코루틴

  • 실행 도중 중단과 재개 가능
  • 중단되어도 내부 상태 유지

💡2강. 스레드와 코루틴

🥨 정의

  • 프로세스(process)
    • 컴퓨터에서 실행되고 있는 프로그램
  • 스레드(thread)
    • 프로세스보다 작은 개념. 여러 코드를 동시에 실행할 수 있도록 해줌
    • 한 프로세스가 여러 개의 스레드를 갖고 있는 경우 => 멀티스레드 환경
  • 코루틴
    • 스레드보다 작은 개념

🥨 스레드-코루틴 차이

  • 프로세스-스레드
    • 스레드는 프로세스를 바꿀 수 없음
  • 스레드-코루틴
    • 코루틴은 중단되었다가 재개될 때 다른 스레드에 배정 가능

🥨 Context Switching 과정

  • 프로세스

    • 프로세스는 각각 독립된 메모리 영역을 갖고 있기 때문에 프로세스로 실행이 변경되면 힙/스택 영역 모두 교체되어야 함
    • context switching 비용이 가장 큼
  • 스레드

    • 스레드는 독립된 스택 영역을 갖고 있지만, 힙 영역을 공유하고 있기 때문에 실행이 변경되면 스택 영역만 교체
    • 프로세스보다는 context switching 비용이 적음
  • 코루틴

    • 1번 코루틴과 2번 코루틴이 같은 스레드에서 실행될 수 있음
    • 동일한 스레드에서 코루틴이 실행되면, 메모리 전부를 공유하므로 스레드보다도 context switching 비용이 적음

🥨 동시성

  • 스레드 동시성

    • 동시성을 위해 여러 개의 스레드가 필요
  • 코루틴 동시성

    • 여러 코루틴은 하나의 스레드에서 번갈아 실행될 수 있기 때문에 단 하나의 스레드만으로도 동시성 확보 가능

🥨 선점형

  • 스레드(선점형)

    • OS가 강제로 실행을 중단시키고 다른 스레드 실행
  • 코루틴(비선점형)

    • yield() 함수와 같이 스스로가 다른 코루틴에게 자리를 양보 가능

.

이번 글에서는 1~2강 내용인 코루틴의 가장 기본적인 개념들을 정리해봤습니다.

아직은 개념 위주라 어렵게 느껴질 수 있지만, 뒤쪽 강의들을 따라가다 보면 자연스럽게 연결되는 느낌이 들더라구요!

다음 글에서는 코루틴 기초의 나머지인 3~5강을 정리해보겠습니다.

끝!🦕

.


👍 참고


© 2022. Haeeul All rights reserved.

🐾해을의 개발자국🐾

Powered by Hydejack v9.1.5