여러작업을 한번에 수행하자

2024. 4. 26. 12:09TIL

✔오늘 배운 중요한 🔑 point

  • 프로세스=스타크래프트 게임 실행  쓰레드=SCV(일꾼)
  • thread키워드로 scv를 생성해서 여러 scv가 동시에 여러작업을 수행할 수 있도록 하자
  • 코루틴은 쓰레드보다 CPU 자원을 절약하고 쓰레드를 더욱 잘개 쪼개서 사용하는 기술이며 구글에서도 코틀린의 코루틴 사용을 적극 권장하고 있을정도로 중요하다. 하지만 쓰레드와 코루틴은 각각의 동시성을 보장하는 방법이 다를 뿐이지 코루틴이 쓰레드를 대체하는 기술이라 생각해서는 안된다

🎯 오늘 배운 내용

 

비동기 프로그래밍

순서대로 하나씩 수행하는것이 아닌 여러가지의 로직들이 완료 여부에 관계없이 실행되는 방식

 

Thread

하나의 메인 쓰레드는 fun main()  메인함수를 의미한다. 프로세스 내에 실행되는 작은 작업 단위를 뜻함

 

import kotlin.concurrent.thread

fun main() {

    val thread1 = thread(start = true) {
        for (i in 1..10) {
            println("쓰레드 1: $i")

        }
    }
    val thread2 = thread(start = true) {
        for (i in 1..10) {
            println("쓰레드 2: $i")

        }
    }
    println("쓰레드1과 2 동시작업시작")
    thread1.join()
    thread2.join()
    println("Main thread: 모든 쓰레드가 완료됬습니다")
}

위 코드를 실행시켜 보면 쓰레드1과 쓰레드2의 수행이 동시에 진행되는것을 확인할 수 있다

 

 

Coroutine

비동기 프로그래밍을 위한 기법 중 하나로서 경량 스레드라고도 한다 

 

코루틴과 쓰레드의 차이점?

쓰레드는 운영 체제에서 할당받은 자원을 사용하기 때문에 스레드를 생성하고 사용하는 데에는 상당한 오버헤드가 발생할 수 있지만
코루틴은 스레드보다 훨씬 가볍고 코루틴은 하나의 스레드 내에서 실행되며, 스레드에 대한 오버헤드 없이 여러 개의 코루틴을 생성하고 사용할 수 있다

쓰레드 간의 상호작용과 동기화는 복잡하고 어려운 문제가 될 수 있지만
코루틴은 비선점형이며, 일시 중단되거나 재개될 수 있고, 따라서 코루틴 간의 상호작용과 동기화가 간단하고 직관적이다

쓰레드운영 체제에 의해 관리되며,
코루틴 스레드 내에서 실행되므로 스레드의 수에 대한 관리가 쉽기 때문에 코루틴을 사용하여 많은 수의 작업을 효율적으로 처리할 수 있다
import kotlinx.coroutines.*

fun main() {
    println("메인쓰레드 시작")
    var job = CoroutineScope(Dispatchers.Default).launch {
        delay(3000)
        println("여기는 코루틴...")
    }
    runBlocking {
        job.join()
    }
    println("메인쓰레드 종료")
    job.cancel()
}

 

 

🤔 어떻게 활용할까?

복잡한 계산기 같은 프로그램은 계산이 CPU를 많이 사용하는 작업이기 때문에 멀티쓰레드를 사용하여 병렬 처리를 하는 방법으로 효율적으로 처리할 수 있으며 

비동기 작업이나 UI업데이트 같은 경우에는 코루틴 사용이 적절하다. UI업데이트의 경우에는 코루틴을 사용하여 메인 쓰레드에서 비동기 작업을 처리할 수 있어서 앱의 반승성을 향상 시킬 수있다

이처럼 복잡한 계산이 필요한 작업에는 쓰레드를 사용하고 비동기 작업이나 UI업데이트 같은 경우에는 코루틴을 사용하는 등 주어진 환경에 따라서 각기 다른 방법을 선택할 수 있어야 한다

📓 오늘의 한줄

Quien anda mucho y lee mucho, ve mucho y sabe mucho

(He who travels much and reads much, sees much and knows much)

- Miguel de Cervantes -

'TIL' 카테고리의 다른 글

(알고리즘) 핸드폰 번호 가리기  (0) 2024.04.28
(알고리즘) 나누어 떨어지는 숫자 배열  (0) 2024.04.27
Test Code 작성을 생활화 합시다  (0) 2024.04.25
Class에 관하여  (0) 2024.04.24
Kotlin 기초문법  (0) 2024.04.23