Coroutines basics
First coroutine
fun main() = runBlocking {
launch {
delay(1000L)
println("World!")
}
println("Hello")
}
fun main() = runBlocking {
launch {
delay(1000L)
println("World!")
}
println("Hello")
}
launch
1. 코루틴 Builder
2. 새로운 코루틴을 동시적으로 실행시킨다.
3. 작업이 독립적으로 수행된다.
4. CoroutineScope에서만 명시돼야 한다.
delay
1. 특정 시간 동안 코루틴을 중단시키는 역할
runBlocking
1. 코루틴 Builder
2. runBlocking 내부에 있는 모든 코루틴의 동작이 완료될 때까지 블록킹된다.
Structured concurrency
- 새로운 코루틴은 코루틴 자신의 생명주기를 한정짓는 특정한 CoroutineScope 내에서 실행되어야 한다.
- Structured concurrency는 많은 코루틴들이 잃어버리거나 메모리 누수되지 않도록 보장해준다.
명확하게 어떤 의미인지 살펴볼 필요성이 있음
Extract Function
suspend 키워드를 이용하여 delay를 사용할 수 있고 이를 통해 함수화 시킬 수 있다.
fun main() = runBlocking {
launch {
doWorld()
}
println("Hello")
}
//suspend 키워드가 없으면 delay를 사용할 수 없다
suspend fun doWorld(){
delay(1000L)
println("World!")
}
Scope Builder
runBlocking와 corountineScope 특징
공통점
- 코루틴 빌더
- Scope내에 있는 함수들이 모두 완료될 때까지 기다린다.
차이점
- runBlocking는 대기를 위해 현재 스레드를 차단시킨다.
- coroutineScope는 일시 중단되어 다른 용도를 위해 스레드를 해제시킨다.
무슨 말인지 차차 배워나아가면서 알아봐야겠다
Scope builder and concurrency
fun main() = runBlocking {
doWorld()
println("done")
}
suspend fun doWorld() = coroutineScope{
launch {
delay(2000L)
println("World 2")
}
launch {
delay(1000L)
println("World 1")
}
println("Hello")
}
fun main() = runBlocking {
doWorld()
println("done")
}
suspend fun doWorld() = coroutineScope{
launch {
delay(2000L)
println("World 2")
}
launch {
delay(1000L)
println("World 1")
}
println("Hello")
}
launch 블록들은 동시에 실행이 된다.
An explicit job
- launch 코루틴 빌더는 Job 객체를 반환한다.
- 반환된 Job 객체를 이용하여 명시적으로 launch or wait이 가능하다.
fun main() = runBlocking{
val job = launch{
delay(1000L)
println("World!")
}
println("Hello")
job.join() //자식 코루틴이 완료될때까지 기다린다.
println("Done")
}
light-weight
fun main() = runBlocking{
repeat(100_000){
launch {
delay(5000L)
print(".")
}
}
}
fun main() = runBlocking{
val job = launch{
delay(1000L)
println("World!")
}
println("Hello")
job.join() //자식 코루틴이 완료될때까지 기다린다.
println("Done")
}
fun main() = runBlocking{
repeat(100_000){
launch {
delay(5000L)
print(".")
}
}
}
코루틴은 경량하다. 10만개의 코루틴을 생성하여 점을 찍어도 out of memory 현상 없이 점이 찍히는 것을 확인할 수 있다.
Author And Source
이 문제에 관하여(Coroutines basics), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jms8732/Coroutines-basics저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)