로직을 동시에 실행할 수 있도록 하는 개념
프로그램은 하나의 메인 쓰레드(실행흐름)가 존재
하나의 메인 쓰레드는 —→ fun main() ←— 메인함수를 의미
기존 코드는 메인 쓰레드 내에서 순차적으로 실행됨(sync)
하지만 별도의 자식 쓰레드를 생성하면 동시에 로직을 실행하도록 바꿀 수 있음
코틀린은 thread 키워드로 쓰레드를 생성 가능
컴퓨터에서 실행중인 프로그램
메모리에 올라가서 실행중인 프로그램을 의미한다.
프로세스는 여러 개의 쓰레드로 구성되어 있다.
프로세스 내에서 실행되는 여러 흐름의 단위(작업 하나하나의 단위)

- 각 Thread 가 독립적인 **Stack 메모리 영역을 가**
프로세스 내부에 존재하는 더 작은 작업의 단위 (최소 1개의 메인 쓰레드는 반드시 존재)
각 쓰레드는 생성되서 어떤 작업을 수행할 때 독립된 Stack 메모리 영역을 가진다.
다시 말해, 쓰레드를 한 개 생성하면 스택(STACK)메모리의 일정 영역을 생성한 쓰레드가 차지한다는 말이다.
운영체제 커널(OS kernel)에 의한 Context Switching을 통해 동시성을 보장
다른 쓰레드가 끝날 때까지 기다리는 상태

어떤 쓰레드를 먼저 실행해야할지 결정하는행위
두 개의 쓰레드는 동시에 작업을 수행함
하나의 CPU 자원을 두고 경쟁한다.
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlin.concurrent.thread
fun main() {
thread(start = true) { //첫번째 쓰레드 생성
for(i in 1..10) { //1에서 10까지
println("Thread1: 현재 숫자는 ${i}") //현재 숫자 출력
runBlocking { // 괄호 안의 내용이 끝날 때까지 기다리겠다.
launch {
delay(1000) //1초 동안 기다림
}
}
}
}
thread(start = true) { //두번째 쓰레드 생성
for(i in 50..60) { //50에서 60까지
println("Thread2: 현재 숫자는 ${i}") //현재 숫자 출력
runBlocking { // 괄호 안의 내용이 끝날 때까지 기다리겠다.
launch {
delay(1000)
}
}
}
}
}
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html