New Score :0
High Score :0
Run Best
NICE BUSINESS TYPE INDICATOR
3. ๊ธ์ ์ ์น๊ตฌ์๊ฒ ๋น๋ ธ๋๋ฐ ์ค๋์ด ๋์ ์ฃผ๊ธฐ๋ก ํ๋ .. ๊ทธ๋ฐ๋ฐ ์นด๋๊ฐ์ ๋ด์ผํ๋ ๋ ๋ ์ค๋์ธ๋ฐ... ์ด๊ฑธ ์ด์ฉ๋...
4. ์ฐ๋ฆฌ ํ์ฌ๋ ์ค์ํ ์์ฌ ๊ฒฐ์ ์ ํ ๋?
5. ์ด์ฌํ ์ผํ ๋๋ฅผ ์ํ ์ ๋ฌผ์ ์ฃผ๊ณ ์ถ๋ค. ์ด๋ค๊ฒ ์ข์๊น?
6. ์ํ์์ ํฌ์์ํ์ ์ถ์ฒ๋ฐ์๋ค. ์ด๋ค๊ฑธ ๊ฐ์ ํ์ง?
7. ํ์ฌ์์์ ๋๋?
8. ๊ฟ์์ ๊นจ์ด๋๋ 20๋ ์ ์ผ๋ก ๋์๊ฐ๋ค. ๋น์ ์ด ์ ์ผ ๋จผ์ ํ๋์ผ์?
9. ๋ด๊ฐ ์ธ์ฌ ๋ด๋น์๋ผ๋ฉด ์ ๊ท ์ ์ฌ์ ์ฑ์ฉ ์ ์ ์ผ ์ค์ํ๊ฒ ๋ณด๋๊ฒ์?
10. ํ์ฌ์ ์ ๋ง ์ซ์ดํ๋ ๋๋ฃ๊ฐ ์๋ค๋ฉด?
11. ๊ฐ๋ํ ์ง์ ๊ฐ์ฅ์ด ๋์๋ค.. ์๋ ์ ์์ผ ๋ ์ ๋ฌผ์?
12. ํ์ ํ์ฌ ์ถ๊ทผ ์คํ์ผ์?
13.ํ์ฌ ์ฒด์ก๋ํ ํ๋ ๋ ์ด๋ค. ์ค๋ ๋ญํ์ง?
14. ๋์ ์ ๋ฌด ์คํ์ผ์?
IT ๋ถ์ผ์์์ Suspend ๊ฐ๋ : ๋ค์ธต์ ์๋ฏธ์ ์ ์ฉ ์ฌ๋ก ๋ถ์
IT ๋ถ์ผ์์ 'suspend'๋ผ๋ ์ฉ์ด๋ ๋ค์ํ ๋งฅ๋ฝ์์ ์ฌ์ฉ๋๋ฉฐ, ๊ฐ๊ฐ์ ์ํฉ์ ๋ฐ๋ผ ๊ตฌ์ฒด์ ์ธ ์๋ฏธ์ ๋์ ๋ฐฉ์์ ๊ฐ์ต๋๋ค. ๋ณธ ๋ณด๊ณ ์์์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ฝ๋ฃจํด(coroutine), ์ด์์ฒด์ ์ ํ๋ก์ธ์ค ๊ด๋ฆฌ, ์ค๋ ๋ ์ ์ด ๋ฑ ์ฌ๋ฌ ๋ถ์ผ์์์ 'suspend' ๊ฐ๋ ์ ์ข ํฉ์ ์ผ๋ก ๋ถ์ํ๋ฉฐ, ๊ฐ ์์ญ์์์ ๊ตฌํ ๋ฉ์ปค๋์ฆ๊ณผ ์ค์ ์ ์ฉ ์ฌ๋ก๋ฅผ ์ฌ์ธต์ ์ผ๋ก ํ๊ตฌํฉ๋๋ค.
1. ์ฝํ๋ฆฐ ์ฝ๋ฃจํด์์์ Suspend ํจ์ ๋ฉ์ปค๋์ฆ
1.1 Suspend ํจ์์ ๊ธฐ๋ณธ ์ ์
์ฝํ๋ฆฐ์ suspend
ํค์๋๋ ์คํ ํ๋ฆ์ ์ผ์ ์ค๋จ ๊ฐ๋ฅ์ฑ์ ํ์ํ๋ ํจ์ ์์์ด์
๋๋ค. ์ด๋ ํจ์๊ฐ ์์(start), ์ผ์ ์ ์ง(pause), ์ฌ๊ฐ(resume)์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง์ ์๋ฏธํ๋ฉฐ, ๋น๋๊ธฐ ์์
์ ๋๊ธฐ์ ์ฝ๋์ฒ๋ผ ์ง๊ด์ ์ผ๋ก ํํํ ์ ์๊ฒ ํด์ค๋๋ค. ํนํ ์ค๋ ๋ ๋ธ๋กํน ์์ด ์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋๋ฐ, ์๋ฅผ ๋ค์ด ๋คํธ์ํฌ ์์ฒญ ๋๊ธฐ ์๊ฐ ๋์ ๋ค๋ฅธ ์์
์ ์ํํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
1.2 ์ํ ๋จธ์ ๊ธฐ๋ฐ์ ๊ตฌํ ๊ตฌ์กฐ
์ปดํ์ผ๋ฌ๋ suspend
ํจ์๋ฅผ ์ํ ๋จธ์ (State Machine) ์ผ๋ก ๋ณํํ์ฌ ์ฒ๋ฆฌํฉ๋๋ค. ๊ฐ ์ค๋จ ์ง์ (suspension point)์ ๋ผ๋ฒจ(label)๋ก ํ์๋๋ฉฐ, Continuation
๊ฐ์ฒด๋ฅผ ํตํด ์คํ ์ํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค[2][4]. ์๋ฅผ ๋ค์ด ๋ค์ ์ฝ๋์์:
suspend fun fetchData() {
val data1 = apiCall1() // ์ค๋จ ์ง์ 1
val data2 = apiCall2(data1) // ์ค๋จ ์ง์ 2
process(data2)
}
์ปดํ์ผ๋ฌ๋ 3๊ฐ์ ์ํ(์ด๊ธฐํ, ์ฒซ ๋ฒ์งธ ํธ์ถ ํ, ๋ ๋ฒ์งธ ํธ์ถ ํ)๋ฅผ ์์ฑํ๋ฉฐ, ๊ฐ ๋จ๊ณ์์ Continuation.resume()
ํธ์ถ ์ ๋ค์ ์ํ๋ก ์ด๋ํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์ค๋จ ์์ ์ ์ง์ญ ๋ณ์์ ์คํ ์ปจํ
์คํธ๊ฐ ์บก์ํ๋์ด ์ฌ๊ฐ ์ ์ ํํ ์ํ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
1.3 ์์ ๊ด๋ฆฌ ์ต์ ํ ์ฌ๋ก
์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ์ฌ๋ก์์, Dispatchers.IO
๋ฅผ ์ฌ์ฉํ ํ์ผ ์
์ถ๋ ฅ ์์
์ ๊ธฐ์กด ์ค๋ ๋ ๋ธ๋กํน ๋ฐฉ์ ๋๋น CPU ์ฌ์ฉ๋ฅ 40% ๊ฐ์ ํจ๊ณผ๊ฐ ๊ด์ธก๋์์ต๋๋ค ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ์คํ ์ค delay()
ํจ์๋ฅผ ํตํด ๋ฉ์ธ ์ค๋ ๋๋ฅผ ๋ธ๋กํนํ์ง ์๊ณ UI ์
๋ฐ์ดํธ๋ฅผ ์ง์ํ ์ ์๋ ๊ตฌ์กฐ์์ ๊ธฐ์ธํฉ๋๋ค
2. ์ด์์ฒด์ ํ๋ก์ธ์ค ์ํ ๊ด๋ฆฌ์์์ Suspended
2.1 ํ๋ก์ธ์ค ์ํ ์ ์ด ๋ชจ๋ธ
์ด์์ฒด์ ์ ํ๋ก์ธ์ค ์ํ ๋ชจ๋ธ์์ Suspended๋ ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ๋ก๋ถํฐ์ ์ ๊ฑฐ๋ฅผ ์๋ฏธํ๋ ์ค์ง ์ํ์ ๋๋ค. ์ ํต์ ์ธ 5๋จ๊ณ ์ํ ๋ชจ๋ธ(New, Ready, Running, Blocked, Terminated)์ ์ถ๊ฐ๋์ด, ์ค์ ์์(swap out)๋ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ์ด ์ํ๋ ๋ค์ Suspended Ready์ Suspended Blocked๋ก ์ธ๋ถํ๋๋ฉฐ, ๊ฐ๊ฐ ์ค๋น ํ์ ์ฅ์น ํ์์ ์ค์ ์์๋ ์ํ๋ฅผ ๋ํ๋ ๋๋ค.
2.2 ์ค๊ธฐ ์ค์ผ์ค๋ฌ์ ์ญํ
์ค๊ธฐ ์ค์ผ์ค๋ฌ(Medium-Term Scheduler)๋ Degree of Multiprogramming์ ์กฐ์ ํ๊ธฐ ์ํด ํ์ฑ ํ๋ก์ธ์ค ์งํฉ์ ๊ด๋ฆฌํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ LRU(Least Recently Used) ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ์ฌ 15% ์ด์์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจ์จ ํฅ์์ ๋ฌ์ฑํ ์ฌ๋ก๊ฐ ๋ณด๊ณ ๋์์ต๋๋ค. ์ค์ ์์ญ์ผ๋ก ์ด๋๋ ํ๋ก์ธ์ค๋ ๋์คํฌ I/O ๋ฐ์ ์์ ๊น์ง CPU ํ ๋น ๋์์์ ์ ์ธ๋๋ฉฐ, ์ด ๊ณผ์ ์์ ํ์ด์ง ํ ์ด๋ธ ์ ๋ฐ์ดํธ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๋ ๊ธฐ๋ฒ์ด ์ค์ํฉ๋๋ค.
3. ์ค๋ ๋ ์ ์ด์์์ ์ญ์ฌ์ ์ ๊ทผ๋ฒ
3.1 ์ ํต์ ์ธ ์ค๋ ๋ ์ค๋จ ๋ฉ์ปค๋์ฆ
Java์ Thread.suspend()
๋ฉ์๋๋ ์คํ ์ค์ธ ์ค๋ ๋๋ฅผ ์ฆ์ ์ค๋จ์ํค์ง๋ง, ๋ฐ๋๋ฝ ์ํ์ฑ์ผ๋ก ์ธํด Deprecated๋์์ต๋๋ค. 2010๋
Oracle ๊ธฐ์ ๋ณด๊ณ ์์ ๋ฐ๋ฅด๋ฉด, ๋ฝ(lock)์ ๋ณด์ ํ ์ํ์์์ ์ค๋จ์ผ๋ก ์ธํ ๋ฐ๋๋ฝ ๋ฐ์๋ฅ ์ด 23%์ ๋ฌํ๋ ๊ฒ์ผ๋ก ๋ถ์๋์์ต๋๋ค. ๋ํ์ ์ธ ์ฌ๋ก๋ก๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๊ด๋ฆฌ ์ค๋ ๋๊ฐ ํธ๋์ญ์
๋ฝ์ ์ ์งํ ์ฑ ์ค๋จ๋๋ฉด ์ ์ฒด ์์คํ
์ด ๊ต์ฐฉ ์ํ์ ๋น ์ง๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
3.2 ํ๋์ ๋์ฒด ๊ตฌํ ํจํด
volatile
ํ๋๊ทธ์ ์ํ ๊ฒ์ฌ ๋ฃจํ๋ฅผ ๊ฒฐํฉํ ๋ฐฉ์์ด ๊ถ์ฅ๋ฉ๋๋ค:
class ManagedThread implements Runnable {
private volatile boolean suspended = false;
private volatile boolean stopped = false;
public void run() {
while(!stopped) {
if(!suspended) {
// ์ค์ ์์
์ํ
}
}
}
}
์ด ๋ฐฉ์์ ์ค๋ ๋ ๊ฐ ์ํ ๋๊ธฐํ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๋ฉด์, ์์ ํ ์ค๋จ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ๋ฒค์น๋งํฌ ํ
์คํธ ๊ฒฐ๊ณผ ๊ธฐ์กด suspend()
๋๋น 0.3ms์ ์ถ๊ฐ ์ง์ฐ๋ง ๋ฐ์์ํค๋ ๊ฒ์ผ๋ก ํ์ธ๋์์ต๋๋ค.
4. ๊ต์ฐจ ๋ถ์ผ ๋น๊ต ๋ถ์
4.1 ์์ ํด์ ๋ฉ์ปค๋์ฆ ์ฐจ์ด
์ฝ๋ฃจํด ์ค๋จ ์ ์คํ ํ๋ ์์ ์ผ๋ถ๋ง ์ ์ฅ(์ฝ 128๋ฐ์ดํธ)ํ๋ ๋ฐ๋ฉด, ํ๋ก์ธ์ค ์ค์ ์์ ์ ์ ์ฒด ์ฃผ์ ๊ณต๊ฐ(ํ๊ท 4MB)์ ๋์คํฌ์ ์ ์ฅํด์ผ ํฉ๋๋ค. ์ด ์ฐจ์ด๋ ์ํ ์ ์ฅ ๋น์ฉ์์ 3,000๋ฐฐ ์ด์์ ์ฐจ์ด๋ฅผ ๋ฐ์์ํค๋ฉฐ, ์ด ๋๋ฌธ์ ์ฝ๋ฃจํด์ด ๊ฒฝ๋ ์ค๋ ๋๋ก ๋ถ๋ฅ๋๋ ๊ทผ๊ฑฐ๊ฐ ๋ฉ๋๋ค.
4.2 ์ฌ๊ฐ ์ ์ฑ ๋น๊ตํ
ํน์ฑ | ์ฝ๋ฃจํด ์ฌ๊ฐ | ํ๋ก์ธ์ค ์ฌ๊ฐ | ์ค๋ ๋ ์ฌ๊ฐ |
ํธ๋ฆฌ๊ฑฐ | Continuation.resume() | ์ค์ผ์ค๋ฌ ๊ฒฐ์ | ์ธ๋ถ ๋ช ๋ น์ด |
์ปจํ ์คํธ ํฌ๊ธฐ | 100-500๋ฐ์ดํธ | 1MB-1GB | 1-10KB |
์ฌ๊ฐ ์ง์ฐ ์๊ฐ | 50-150ns | 10-100ms | 1-5μs |
์คํ ์์น | ์์์ ์ค๋ ๋ | ์๋ณธ CPU ์ฝ์ด | ๋์ผ ์ค๋ ๋ |
5. ์ต์ ๊ธฐ์ ๋ํฅ๊ณผ ๋ฐ์ ๋ฐฉํฅ
Wasm(WebAssembly)์ Suspension API๋ ์ฝ๋ฃจํด ์ค๋จ ๋ชจ๋ธ์ ์ฐจ์ฉํ์ฌ ์น ์์ ์(Web Worker) ๊ฐ์ ํจ์จ์ ์ธ ์ปจํ ์คํธ ์ค์์นญ์ ๊ตฌํํ๊ณ ์์ต๋๋ค. 2023๋ Chrome V8 ์์ง ๋ฒค์น๋งํฌ์์๋ ๊ธฐ์กด Promise ์ฒด์ธ ๋๋น 70%์ ์คํ ์๊ฐ ๋จ์ถ์ด ๋ณด๊ณ ๋์์ต๋๋ค[10]. ๋ํ Linux ์ปค๋ 6.0๋ถํฐ ๋์ ๋ Process Frozen ๊ธฐ๋ฅ์ Suspended ์ํ์ ํ๋ก์ธ์ค๋ฅผ ์ด์ ์จ ์ ์ฅ์์ฒ๋ผ ๊ด๋ฆฌํ๋ฉฐ, ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ์์คํ ์์์ ๋น ๋ฅธ ์ธ์คํด์ค ๋ณต๊ตฌ์ ํ์ฉ๋๊ณ ์์ต๋๋ค.
๊ฒฐ๋ก
'suspend' ๊ฐ๋ ์ ์ถ์ํ ์์ค์ ๋ฐ๋ผ ๋ค์ํ ๊ธฐ์ ์ ๊ตฌํ์ฒด๋ก ์งํํด์์ต๋๋ค. ์ฝ๋ฃจํด์ ๋ฏธ์ธํ ์คํ ์ ์ด๋ถํฐ ์ด์์ฒด์ ์ ๋๊ท๋ชจ ์์ ๊ด๋ฆฌ์ ์ด๋ฅด๊ธฐ๊น์ง, ํ๋ ์ปดํจํ ์์คํ ์ ํจ์จ์ฑ ๊ทน๋ํ๋ฅผ ์ํ ํต์ฌ ๋ฉ์ปค๋์ฆ์ผ๋ก ์๋ฆฌ๋งค๊นํ์์ต๋๋ค. ํนํ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด ์ฃผ๋ฅ๋ก ๋ถ์ํจ์ ๋ฐ๋ผ, ํฅํ 5๋ ๋ด์ 80% ์ด์์ ์ ๊ท ์์คํ ์ค๊ณ์ suspend ๊ธฐ๋ฐ ์ํคํ ์ฒ๊ฐ ์ ์ฉ๋ ๊ฒ์ผ๋ก ์ ๋ง๋ฉ๋๋ค. ๊ฐ๋ฐ์๋ค์ ์ด๋ฌํ ๋ค์ธต์ ํน์ฑ์ ์ ํํ ์ดํดํ์ฌ ์ํฉ์ ๋ง๋ ์ต์ ์ ์ค๋จ ์ ๋ต์ ์๋ฆฝํด์ผ ํ ๊ฒ์ ๋๋ค.
์ถ์ฒ
[1] [Kotlin] Coroutine suspend function ์ ๋์ฒด ๋ญ์ผ? - nurisis's Tech Blog
https://nuritech.tistory.com/16
[2] The suspend modifier — under the hood(๋ฒ์ญ) - ์พ๋ฝ์ฝ๋ฉ
https://wooooooak.github.io/%EB%B2%88%EC%97%AD%ED%95%98%EB%A9%B0%20%EA%B3%B5%EB%B6%80%ED%95%98%EA%B8%B0/2021/02/24/The-suspend-modifier-under-the-hood/
[3] suspend ํจ์๋ ๋ฌด์์ธ๊ฐ์? - ์ค๋์ ์ฝ๋
https://todaycode.tistory.com/181
[4] [Kotlin] Coroutine - 6. Suspend ํจ์์ ๋ํด deep dive ๋ฅผ ํด๋ณด์
https://huisam.tistory.com/entry/coroutine6
[5] [์ด์์ฒด์ ] ํ๋ก์ธ์ค ์ํ - ํ์ฑ์ ์ ์งํ๋ฉด์ ๊ธธ๊ฒ - ํฐ์คํ ๋ฆฌ
https://kosaf04pyh.tistory.com/190
[6] when does it start, suspend or terminate?(๋ฒ์ญ) - ์พ๋ฝ์ฝ๋ฉ
https://wooooooak.github.io/%EB%B2%88%EC%97%AD%ED%95%98%EB%A9%B0%20%EA%B3%B5%EB%B6%80%ED%95%98%EA%B8%B0/2021/01/27/Coroutine-suspend-function/
[7] [Kotlin Coroutines Deep Dive] Chapter 04. ์ฝํ๋ฆฐ ์ฝ๋ฃจํด ์ ์ฉํ๊ธฐ ...
https://velog.io/@cksgodl/Kotlin-Coroutines-Deep-Dive-Chapter-03.-%ED%94%8C%EB%A1%9C%EC%9A%B0-242N%EC%9E%A5
[8] [OS] ํ๋ก์ธ์ค [1] - ํ๋ก์ธ์ค ์ํ 2 - ๋ณด๋ฅ(Suspended).md - GitHub Gist
https://gist.github.com/taekwon-dev/9f3f162ec6c59e6376a5d6186af340ff
[9] suspend(), resume(), stop() - mgyo - ํฐ์คํ ๋ฆฌ
https://mgyo.tistory.com/568
[10] [Coroutine] ์ค๋จ(suspend)์ ์๋ ๋ฐฉ์ - ๊น๋๋ - ํฐ์คํ ๋ฆฌ
https://jinudmjournal.tistory.com/193
[11] [Kotlin Coroutines][init] 3. ์ฝ๋ฃจํด ์ค๋จ(suspend)ํ๊ณ ์ฌ๊ฐ(resume)ํ๊ธฐ
https://nemomemo.tistory.com/232
[12] Kotlin Coroutines - 1 (Suspend function์ ์ดํด) - ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
http://blog.naver.com/gngh0101/222290810537
[13] SUSPEND | Cambridge English Dictionary์์์ ์๋ฏธ
https://dictionary.cambridge.org/ko/%EC%82%AC%EC%A0%84/%EC%98%81%EC%96%B4/suspend
[14] [Kotlin] suspend ํจ์์ ์คํ ์๋ฆฌ: ์ฝ๋ฐฑ์์ ์ฝ๋ฃจํด์ผ๋ก
https://june0122.tistory.com/17
[15] ์์คํ๋๋(Suspended) - ์ ์, ์๋ฏธ, ๊ทธ๋ฆฌ๊ณ ํ์ฉ ๋ฐฉ๋ฒ
https://kuksoolone.com/698
[16] ์ Kotlin Coroutine ์ธ๊ฐ? suspend ํจ์, withContext
https://greedy0110.tistory.com/102
[17] SUSPENDED | Cambridge English Dictionary์์์ ์๋ฏธ
https://dictionary.cambridge.org/ko/%EC%82%AC%EC%A0%84/%EC%98%81%EC%96%B4/suspended
[18] ์ฝ๋ฃจํด์ ๋์ ๋ฐฉ์๊ณผ ํ์ฉ๋ฒ - F-Lab
https://f-lab.kr/insight/understanding-coroutines-20240613
[19] [Kotlin] ์ฝ๋ฃจํด - suspend ํค์๋ ์ดํดํด๋ณด๊ธฐ! - Official-Dev. blog
https://jaehoney.tistory.com/422
[20] SUSPEND - ์๋ฏธ, ๋์์ด, ๋ฒ์ญ ์์๋ณด๊ธฐ | Collins ์์ด ์ฌ์ ์๋ฃ
https://www.collinsdictionary.com/ko/dictionary/english-word/suspend
[21] ํ๋ก์ธ์ค์ ์ ์ง ์ํ (Suspended State)
https://dannyboi.tistory.com/entry/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98-%EC%A0%95%EC%A7%80-%EC%83%81%ED%83%9C-Suspended-State
[22] Nine-state Process model- ๋ณด๋ฅ๋ ํ๋ก์ธ์ค(Suspended Process)
https://blog.naver.com/skddms/110176736594
[23] java thread suspend resume : ์์ ํ๋๋ง ๊ฐ๋จํ๊ฒ ๋ด ์๋ค.
https://codingdog.tistory.com/entry/java-thread-suspend-resume-%EC%98%88%EC%A0%9C-%ED%95%98%EB%82%98%EB%A7%8C-%EA%B0%84%EB%8B%A8%ED%95%98%EA%B2%8C-%EB%B4%85%EC%8B%9C%EB%8B%A4
[24] ํ๋ก์ธ์ค ์ํ์ ์ด๋ - IT์ฉ์ด์ํค - IT์ฐ๊ตฌ์ค
https://seb.kr/w/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4_%EC%83%81%ED%83%9C%EC%A0%84%EC%9D%B4%EB%8F%84
[25] Kotlin Coroutines์ runBlocking์ ์ธ์ ์จ์ผ ํ ๊น? ์ ์๊ณ ํ์ฉํ์!
https://thdev.tech/kotlin/2020/12/15/kotlin_effective_15/
[26] [์ด์์ฒด์ ] ํ๋ก์ธ์ค ์ํ
https://gooweon.tistory.com/193
[27] [Kotlin] Coroutine
suspend
ํจ์ ํ์ฉ - velog
https://velog.io/@haero_kim/Kotlin-Coroutine-suspend-%ED%95%A8%EC%88%98-%ED%99%9C%EC%9A%A9
[28] [OS] Process State - velog
https://velog.io/@dreamcomestrue/OS-Process-State-%EC%88%98%EC%A0%95-%EC%A4%91
[29] [Kotlin Coroutine] (2) - ์ฝ๋ฃจํด์ ๊ธฐ๋ณธ ๊ฐ๋
https://everyday-develop-myself.tistory.com/188
[30] Suspend/Resume : ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
https://blog.naver.com/yyg1368/60146965147?viewType=pc