코틀린 기본 문법 - 쓰레드

2024. 6. 12. 12:09Kotlin 기본 문법 정리

# 쓰레드의 개념  

- 프로그램은 하나의 메인 쓰레드(실행 흐름)가 존재함

- 하나의 메인 쓰레드는 fun main() (메인 함수)를 의미

- 실습 프로그램은 메인 쓰레드 위에서 로직을 실행해 동시 처리가 불가능했음

- 별도의 자식 쓰레드를 생성하여 동시에 로직 실행 가능

- 코틀린은 thread 키워드로 쓰레드 생성 가능

 

# 쓰레드의 구조

- 프로세스: 프로그램이 메모리에 올라가서 실행되는 것 = 프로세스 1개

- 쓰레드는 프로세스 안에서 더 작은 작업의 단위를 의미

- 쓰레드는 생성되어서 수행할 때 각 독립된 메모리 영역인 STACK을 가짐

- 즉, 쓰레드를 한 개 생성하면 스택메모리의 일정 영역을 차지

 

# 예시 코드

- 1부터 10까지, 50부터 60까지 출력하는 코드를 2개의 쓰레드로 경쟁

- 1초마다 CPU 자원 경쟁을 시키기 위해 딜레이를 추가(runBlocking())

- 쓰레드 1과 쓰레드 2의 순서는 보장되지 않고 경쟁함

- 총 3개의 쓰레드로 구성(쓰레드1, 쓰레드2, 메인 쓰레드)

- 쓰레드 1,2가 동시에 처리됨 => 하나의 CPU 자원을 두고 경쟁

 

# 환경 설정하기(코루틴 사용)

- 외부 종속성 추가: https://github.com/Kotlin/kotlinx.coroutines#android

- Gradle의 아래 코드 복사

implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0-RC")

- Gradle Scripts => build.gradle(Module :app)의 dependencies에 코드를 붙여넣기 

- sync now 해서 적용

 

# 예시 코드 실행: 쓰레드 1과 2가 실행할 때마다 순서 엎치락뒤치락함

- CPU 자원을 할당하기 위해 경쟁할 때, 조금 더 빨리 접근한 쓰레드가 먼저 CPU 자원을 할당받음

fun main() {
    thread(start = true) {
        for(i in 1..10) {
            println("Thread1: 현재 숫자는 ${i}")
            runBlocking {
                launch {
                    delay(1000)
                }
            }
        }
    }

    thread(start = true) {
        for(i in 50..60) {
            println("Thread2: 현재 숫자는 ${i}")
            runBlocking {
                launch {
                    delay(1000)
                }
            }
        }
    }
}