예를 들어 이런 코드가 있다고 해보면
suspend 는 다른언어 async 같이 코루틴 키워드임
이게 바이트 코드로 바뀌면
이런식으로 delay 같은 suspend 함수 기준으로 switch 분기가 생김
그리고 cont 는 Continuation 클래스인데 저걸 resume시키면 함수가 다시 실행되면서 실행 안했던 부분만 재개되는거임
resume을 디스패처한테 맡길수도 있고 프로그래머가 시켜줄수도 있는데
아까 소켓 프로그래밍할 땐 read 함수 콜백으로 resume을 넣어서 클라이언트가 write 작업 할 때만 cpu에 올라가도록 짰었음 ㅇㅅㅇ
생각보다 별 거 없네
블로킹 당했을 때 빠져나가고, 끝났을 때 다시 재개시키는 코드를 잘 짜야댐 ㅇㅅㅇ
https://m.dcinside.com/board/programming/2086022
잘못짜면 이 글처럼 블로킹 당해도 cpu를 안빠져나가고 점유할수도 있음
해당 댓글은 삭제되었습니다.
main에서 f를 실행시키면 f는 디스패처(쓰레드 풀)로 이동해서 따로 실행이 되고, main은 아무런 블로킹 없이 f가 끝나든 말든 f 아래의 코드를 실행시킴
f가 끝나길 기다리고 싶으면 await를 시켜야 하는데 일반 함수내에선 코루틴을 실행 못하는 등 제약이 있음
쓰레드를 생성시키지 않고 최적화된 쓰레드 풀에 함수만 끼웠다가 뺐다고 생각하면 됨
cpu가 쓰레드를 끼웠다 뺐다 하는것처럼 쓰레드풀이 코루틴을 끼웠다 뺐다 하는건데 코틀린 코루틴은 더 나아가서 필요할때만 끼울 수 있음
대신 반대로 빼고 싶은데 못빼는 경우도 생김 그래서 깊게 들어갈수록 어려워
synchronized 예시가 함수를 쓰레드풀에서 빼내고 싶은데 못빼는경우
그냥 쉽게 생각하면 쓰레드는 OS가 무지성으로 너희는 10ms 만 일하고 자리 교체해 하는거고 코틀린 코루틴은 너흰 일이 없을 때까지 계-속 일하다가 일 없으면 교체해 이런 방식이야
그래서 쓰레드는 일이 없어도 10ms를 무조건 자리 차지해야하고 코루틴은 일이 있을때만 자리를 차지하는게 가능
쓰레드를 극한까지 최적화 할 수 있단거지 ㅇㅅㅇ