yield 함수가 없어도 결과가 동일한 이유가 뭔가요?
yield 함수를 지워도 실행을 했을 때 출력 순서가 동일한 이유가 궁금합니다!
runBlocking 으로 실행한 코루틴과 launch 로 실행한 코루틴의 순서가 변경됐던 이유가 yield 때문이 아니기 때문일까요?
답변 1
0
안녕하세요 파이팅해야지님! 질문 주셔서 감사합니다! 🙂
핵심 적인 부분은 yield() 2개를 동시에 지운다는 점이에요!
fun main(): Unit = runBlocking {
println("START")
launch {
newRoutine()
}
yield() // 1번, yield를 제거한다면?!
println("END")
}
suspend fun newRoutine() {
val num1 = 1
val num2 = 2
yield() // 2번, yield를 제거한다면?!
println("${num1 + num2}")
}이 경우는 다음과 같이 동작합니다.
main함수가 실행되고launch를 이용해 새로운 코루틴이 시작! (되었으나 해당 코루틴이 즉시 실행되지는 않는다)따라서 launch 아래의 1번
yield로 넘어옴yield에 의해 main 루틴이 실행을 new 루틴에게 양보newRoutine함수로 넘어와 변수 선언 이후 다시 2번 yield가 실행yield에 의해 다시 main 루틴으로 넘어와 END 출력main 루틴이 종료되었으므로
newRoutine으로 넘어와println출력
그리고 yield()를 함께 지우면 아래와 같은 코드가 되는데요!
fun main(): Unit = runBlocking {
println("START")
// 새로운 코루틴 시작!
launch {
newRoutine()
}
println("END")
}
suspend fun newRoutine() {
val num1 = 1
val num2 = 2
println("${num1 + num2}")
}이때 새로운 코루틴을 launch로 시작한다고 해서 반드시 해당 코루틴이 먼저 실행되는게 아닙니다.
따라서 이 경우는 아래와 같이 동작합니다!
main함수가 실행되고launch를 이용해 새로운 코루틴이 시작! (되었으나 해당 코루틴이 즉시 실행되지는 않는다)따라서 main 함수의 END를 출력
main 루틴이 종료되었으므로
newRoutine으로 넘어와println출력
답변이 도움이 되었으면 좋겠습니다. 감사합니다!! 🙇
Dispatchers 별 차이점 관련 질문
0
93
1
코루틴과 가상 스레드의 차이가 궁금합니다.
1
311
2
Coroutine과 ThreadLocal관련 질문
0
154
2
선생님 강의를 듣고 크롤링에 코루틴을 적용해보고 있습니다. 그런데 코루틴이 하나만 나와서 동시처리가 안되는데 혹시 봐주실 수 있나요??
1
115
1
7강에 대해서 궁금증이 있는데요
1
117
2
Spring MVC에서 corountine 활용 방안
1
540
1
9강 코루틴 중단과 재개관련 문의 드립니다.
0
124
2
suspend 함수에 관해 추가적인 질문 있습니다! (runcatching, Result)
0
126
1
간단 질문.. join() vs delay()
0
158
2
코루틴을 잘 사용하고 있는지 궁금합니다.
0
196
1
CoroutineScope & Dispatcher 질문
0
161
2
async await 관련 질문
1
137
2
코루틴 실행 순서 궁금합니다.
1
232
2
corutine task에 대한 질문
1
195
2
completing의 존재의의가 궁금합니다.
1
161
1
코루틴 dispatcher IO관련 질문
0
187
1
Job 질문이 있습니다
1
204
1
스프링 MVC 환경에서의 코루틴
1
2096
1
자식1, 2와 부모코루틴의 관계
1
225
1
한 suspend fun 의 반환값이 다른 suspend fun의 파라미터로 쓰일 때
1
329
2
delay 함수에 대해 질문이 있습니다
1
394
1
runBlocking을 사용하는 경우가 있을까요?
0
400
1
delay가 없으면 실행 안 되는 이유
0
295
1
코루틴 스코프
0
313
1





