비동기 프로그래밍
요청 보내고 결과값을 받을 때까지 작업을 멈추지 않고 다른 작업 수행 가능
동기 프로그래밍
요청 보내고 결과값을 받을 때까지 작업을 멈춤
코틀린은 thread 키워드로 쓰레드를 생성할 수 있다.
프로세스란 프로그램이 메모리에 올라가서 실행되면 프로세스라고 한다.
프로세스 안에는 여러개의 쓰레드가 존재할 수 있다. (최소 한 개의 main쓰레드는 존재)
쓰레드는 프로세스 안에서 각각 독립적인 메모리 영역인 STACK을 가진다.

경마 프로그램의 말들은 동시에 출발해야 함
(한마리 출발하고 도착하고 또 다른 말이 출발하면 경마가 아님..)
게임에서 몬스터를 공격하고, 체력이 줄어들고, 효과음이 발생하는 건 동시에 일어나야 함
각각 작업마다 끝날때까지 딜레이가 발생하면 이상함..
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)
}
}
}
}
}
runBlocking {
launch {
delay(1000)
}
}
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.2")
}
위 코드를 그래들 dependencies에 추가하고 저장해야한다.
비동기 프로그래밍을 가능하게 한다.
쓰레드보다 더욱 가볍게 사용할 수 있다.
하나의 쓰레드를 더욱 잘게 쪼개서 사용하는 기술 (Light-Weight Thread)
구글에서 적극 권장
launch
결과값이 없는 코루틴 빌더
Job 객체로 코루틴 관리
Job 객체는 다양한 함수를 갖고 있다.
join : 현재 코루틴이 종료될 때 까지 대기
cancel : 현재 코루틴 즉시 종료
async
결과값이 있는 쿠루틴 빌더
Deffered 타입으로 값을 리턴
쓰레드보다 코루틴이 경량화 개념
고로 하나의 쓰레드 안에서 여러개의 코루틴 사용가능 그래서 하나의 쓰레드를 골라야 코루틴 사용 가능
둘 다 동시성 프로그래밍을 위한 기술이다.
위 기술을 컨텍스트 스위칭이 중요한 개념이다. (한 쓰레드에서의 결과값을 다른 쓰레드에 저장 등..)
쓰레드A가 쓰레드B의 결과를 기다리고 있다.
이때 쓰레드A는 블로킹 상태다.
쓰레드A는 쓰레드B의 결과가 나올 때까지 해당 자원을 사용하지 못한다.
동시처리를 위해 스택영역을 별도로 할당하는 쓰레드처럼 동작하지 않음
그러나 동시성 보장 가능
하나의 쓰레드에서 여러개의 코루틴을 수행 가능
커널의 스케쥴링을 따르는 컨텍스트 스위칭을 수행하지 않음