디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

Thread.Sleep과 Task.Delay 설명 자세히 해봤어(수정)

음음엄(67.188) 2017.06.30 14:50:43
조회 21195 추천 26 댓글 34
														


viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b28b77a16fb3dab004c86b6fdc843afe757eec56b87102ec3efadaa93a82671bde0bb107aeb70716d6568a8452c7dec3b8ec9c9da7af51e25b


자 일단 소스코드는 이거야. 굳이 Sleep test하는데 웬 Task.Run? 할테지만 일단 한번 끝까지 봐바.


내가 말하는 내용을 모두 이해 한다면 Task.Run을 사용한 이유도 이해가 될꺼야



일단 각자 method들 설명을 좀 봐볼까?


먼저 Thread.Sleep이야


viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b28b77a16fb3dab004c86b6fdc843afe757eec56b87102ec3efadaa93a82671bde0bb107aeb70716d6568a8452c6dcc3eee89fccf2af51e25b


특별한거 없지? 우리가 알고있는 그 Sleep이 맞아. 밀리세크 수만큼 스레드가 블락 된대


다음 Task.Delay를 한번 봐볼까?


viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b28b77a16fb3dab004c86b6fdc843afe757eec56b87102ec3efadaa93a82671bde0bb107aeb70716d6568a8452c0d9c3e5e6c89ff5af51e25b


오 먼가 설명이 약간 달라.. 반환된 Task를 연산하기 전에 밀리세크만큼 기다린대.

일단 뭐 조금 다르다는 느낌정도지?

그리고 빨간색으로 표시된 awaitable Task가 우리가 주목해야 할 부분이야.

일단은 뒤에가서 다시 보자구.



바로 위에 코드가 있지만, 상기겸 코드를 다시 한번 봐볼까?

viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b28b77a16fb3dab004c86b6fdc843afe757eec56b87102ec3efadaa93a82671bde0bb107aeb70716d6568a8452c0d4c1b8bcc89df3af51e25b

자 문제를 내볼게, 출력 순서가 어떻게 될 것 같아?

Console.WriteLine에 찍고있는 숫자를 기준으로 생각해 주면 될 것 같아.

물론 프갤에 고수형들 많으니까 내가 지금 뭐하는건지 눈치 챈 형들도 있을꺼.

이미 내용 알면 걍 살포시 뒤로가기 눌러주면 돼


자 이제 모르는 형들만 남았겠지? 더 진행 해볼게, 바로 출력 결과를 보여주면

viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b28b77a16fb3dab004c86b6fdc843afe757eec56b87102ec3efadaa93a82671bde0bb107aeb70716d6568a8452918fc4eeed9fc0a2af51e25b


출력 순서는 위와 같아.



혹시 "당연한거 아냐? 이거 말할라 했냐 ㅄ" 하는 형들은 아직까지 안나가고 머함? 빨리 뒤로가기 누르셈



만약에 async/await를 모르는 형들은 오잉? 했을꺼, 1, 2, 3, 4가 출력 될 것 같이 생겼는데 결과는 1, 2, 4, 3이지?


심지어 시간도 봐바. 4가 출력된 시간은 2가 출력된것과 같은 52초야


그리고 또 하나 주목 할 부분은, ManagedThreadID야.


1, 2, 4를 찍을때는 ManagedThreadID가 3인데, 헉.. 4찍을때 ThreadID 출력 안했네.. 쟤도 3이라고 찍혀 틀림없어 날 믿어.



특이하게 마지막 3: 4라고 찍히지?(녹색박스)


일단 이거 설명은 아래에서 하고, 대체 왜 3보다 4가 먼저 찍혔는지, 그리고 왜 또 시간은 52초에 찍혔는지 먼저 알아보자구


아까 Task.Delay 설명글에서 내가 빨간 박스 쳤던거 기억하지?


awaitable이라고 되어있던 부분 말야.. awaitable 함수는 보통 async/await 키워드와 함께 사용하거나,


return되는 Task를 실행 해야지 원하는 결과를 얻을 수 있어


자 그럼 async/await이란 무엇이냐!


async/await 키워드는 .net 4.0때 얼굴을 내비친 아이야..


내 개인적인 추측이지만, 늅늅충들이 Winform/WPF에서 하도 UI Thread로 block wait를 걸어놓고


UI 행걸린다고 징징대서 MS가 넣은걸로 추정됨. 그리고 go lang에서도 지원하고있고


c++또한 현재 구현 들어와 있어(c++은 정확히 언제 들어왔는지 잘 모르겠다..)



결론을 말해주면, async/await는 동작이 조금 특이한데, await가 걸리는 시점에서 함수 호출자는 return이 돼.


await의 의미를 말로 풀어보면, 


"이건 시간 좀 걸리는 함수니깐 넌 니 할일 하러 돌아가. 이거 함수 결과 오면 형이 아래코드들 실행하라고 말해줄겡"


하는 거라고 생각하면 돼



그림으로 순서를 설명해보면,


viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b28b77a16fb3dab004c86b6fdc843afe757eec56b87102ec3efadaa93a82671bde0bb107aeb70716d6568a8452c38fc6bcecca9fa7af51e25b


앞서서 출력 결과물 봤지? 실제 코드도 위와같이 실행이 돼.


Task.Sleep을 수행하러 들어온 (빨간색)Thread는 3에서 block wait로 1초를 기다리고, 4를 수행하지.


이때 동작은 말그대로 block wait야. 이때 스레드는 바보처럼 마냥 1초를 기다리게 되지.


(c++은 APC라도 있어서 요 스레드가 뭔가 할걸 기대라도 할 수 있지만, C#은 그런거 없어. 쟤는 그냥 ㅄ같이 걍 대기임)


요 Sleep을 한 Thread가 UI Thread였다고 생각해봐. 1초간 프로그램이 응답이 없었겠지?


안타깝게도, UI Thread한테 이런식으로 block wait를 시키는 개발자들 많더라고...


토달지마 내가 봤다고



다시 말하지만, 이런 증상을 해결 해 줄 수 있는게 async/await야.


(빨간)Thread는 5에서 await을 만난 순간, awaitable한 (녹색)Task.Delay를 프레임웤에게 실행해 달라고 부탁해.


물론 이때 (노랑)8번 코드 영역도 함께 던지게 되지. (녹색)7 부분 실행을 하고 나면 이후에 실행 해 달라고..



이걸 어떻게 아냐고? 다시한번 앞의 결과물을 봐볼까?


viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b28b77a16fb3dab004c86b6fdc843afe757eec56b87102ec3efadaa93a82671bde0bb107aeb70716d6568a845291dec6eaee9bc8f0af51e25b


코드에도 나와 있지만, 그리고 다시 말하지만, 콜론으로 구분되는 두번째 공간에 찍힌 숫자의 의미는 Managed Thread ID야.


분명히 두번째 라인을 출력한 아이는 ManagedThreadID가 3인데,


동일 함수 내에 있는 세번째 Console.WriteLine을 실행한 아이의 ManagedThreadID는 4지?


이 결과물이 그 증거야.




그래도 못믿겠다고? 소설을 쓰라고?


그래 분명 이러는 사람들 있음.


그래서 더 준비함


viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b28b77a16fb3dab004c86b6fdc843afe757eec56b87102ec3efadaa93a82671bde0bf753ffde0215d3538c8f340b2bd6a304a093a0ae327672f61de5b6


위에 제공한 샘플 프로그램 빌드하고 IL을 까보면 대략 이렇게 나와


위에 보면 Console.WriteLine("2 : ... 실행하는 코드 아래쪽 영역인데, 


잘 보면, 먼가 꽁냥꽁냥 열씸히 보따리 싸서 실행지점 던져놓고 지는 바로 나가는 코드가 보이지?


그리고 보따리 쌀때 호출 주소 쫒아가 보면 우리가 소설을 쓰고 있었던 Console.WriteLine("3 : ... 부분이 보여



이제 대충 알겠지?


좀 산만한 내용을 보충하기 위해 요약을 다시 한번 하면 아래와 같아.


Thread.Sleep : 현재 요 Method를 수행하는 놈을 Block wait 시키고 wait가 끝났을때 동일 Thread를 하부 코드 실행하도록 풀어준다.

Task.Delay : 현재 요 Method를 수행하는 놈을(await 했을때) 바로 호출 지점으로 돌려 보내고, 다른 스레드를 통해 하부 코드를 실행 하도록 시킨다.


ㅇㅋ?






추천 비추천

26

고정닉 2

1

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 경제관념 부족해서 돈 막 쓸 것 같은 스타는? 운영자 24/05/13 - -
공지 프로그래밍 갤러리 이용 안내 [69] 운영자 20.09.28 34719 62
2696225 IU '관객이 될게 (I stan U)' Live Clip 발명도둑잡기갤로그로 이동합니다. 00:32 1 0
2696224 [뻘글] 프로그래밍 vs 스포츠토토 뭐가 더 어렵냐? 프갤러(211.228) 00:29 4 0
2696223 중국은 수출 위주가 아니라 내수 위주라 무역장벽 효과가 적습니다 발명도둑잡기갤로그로 이동합니다. 00:23 5 0
2696222 원종이 교도소생활 할만하다고 인터뷰햇더라 [2] 헬마스터갤로그로 이동합니다. 00:23 16 0
2696221 프로젝트 망한거같은데 어떡함 [4] 프갤러(180.83) 00:23 26 0
2696220 요즘 마약운전이 많다고 하던데 헬마스터갤로그로 이동합니다. 00:19 9 0
2696219 캬 옆동네는 신나게 불타고 있네 ㄹㄹ3(211.235) 00:18 20 0
2696218 [월드&포토] "공포영화인줄" 英 왕실 논란의 초상화 발명도둑잡기갤로그로 이동합니다. 00:17 4 0
2696217 "내가 이렇게 못생겼어? 전시회서 빼라"···초상화에 뿔난 억만장자女 발명도둑잡기갤로그로 이동합니다. 00:17 7 0
2696216 中, '국빈방문' 푸틴에 베이징덕·러시아 노래로 대접 발명도둑잡기갤로그로 이동합니다. 00:14 5 0
2696215 여자가 좋아 ㅠㅠㅠㅠㅠㅠㅠㅠㅠ [1] 딱국(113.198) 00:13 13 0
2696214 개발자 특징) 평일에는 샤워 안 함 [1] ㅇㄷ(219.124) 00:11 23 0
2696213 엑셀 vs 구글 시트 vs 네이버셀 비교 프갤러(211.228) 00:10 12 0
2696212 좋아하는 여자한테 우수한 수컷임을 증명하고 싶어 ㅠㅠㅠㅠ 딱국(113.198) 00:09 9 0
2696211 우수한 수컷임을 증명하구 마구마구 해버리구싶어 ㅠㅠㅠ [1] 딱국(113.198) 05.16 16 0
2696210 연애 금지 발명도둑잡기갤로그로 이동합니다. 05.16 11 0
2696209 미소녀 유방에 파묻히고 싶음 ㅇㅅㅇ 류류(121.160) 05.16 17 1
2696208 수컷이 곡물을 재배하는 대신 호랑이를 잡아오는 이유 [3] 딱국(113.198) 05.16 32 0
2696207 VBA vs 자바스크립트 [1] 프갤러(211.228) 05.16 21 0
2696206 스팀게임 만들어보고싶은데 프갤러(175.212) 05.16 9 0
2696205 오늘의 소설, 영화 실마리: 대학교, 중고등학교 교내 고민상담소 이야기 발명도둑잡기갤로그로 이동합니다. 05.16 8 0
2696204 슬픈망곰 ㅎㅍㄴㅅ(61.98) 05.16 20 1
2696203 브레인베이.Bci2000 아시는분 글갤러1(37.30) 05.16 7 0
2696201 국비 탈주충 연봉변화 [14] 프갤러(118.235) 05.16 115 0
2696200 취업은 하고싶은데 붙어도 3년 안에 때려칠 것 같음 ㅇㅇ(124.49) 05.16 34 0
2696199 5월 16일 비보 곽민선 아나운서, 시력 손상 위기 발명도둑잡기갤로그로 이동합니다. 05.16 22 0
2696198 영양제는 국내 가격이 해외 직수 제품보다 가격이 4배 정도 비싼데.. ㅎ [16] ☆단비☆갤로그로 이동합니다. 05.16 35 0
2696197 딱국 근데 원시시대에 태어났으면 기요미 전략 안했을듯 [4] 딱국(113.198) 05.16 30 0
2696196 해외직구 금지 물품: 전선·케이블 및 코드류, 스위치, 컴퓨터용 파워 등 [1] ☆단비☆갤로그로 이동합니다. 05.16 24 0
2696195 맛이 간듯 [3] ㅎㅍㄴㅅ(61.98) 05.16 29 1
2696194 요즘 프론트로 취직하는 애들은 얼마나 괴물인거임 [6] ㅇㅇ(218.148) 05.16 75 0
2696192 Megalopolis - Teaser Trailer 발명도둑잡기갤로그로 이동합니다. 05.16 6 0
2696191 결혼은 아무리봐도 불편할것같지않냐? [5] 헬마스터갤로그로 이동합니다. 05.16 43 0
2696190 돈 적게 받아도 월급루팡질 가능하면 슈퍼막코더(116.64) 05.16 12 0
2696189 6월부터 직구 불가능...JPG 발명도둑잡기갤로그로 이동합니다. 05.16 31 1
2696188 미래의 어느 역사학자들의 대화라는데 (요약편) 프갤러(211.241) 05.16 11 0
2696187 이러니 살이 안빠지지..ㅇㅅㅇ [2] 헤르 미온느갤로그로 이동합니다. 05.16 16 0
2696186 빙산의 일각 발명도둑잡기갤로그로 이동합니다. 05.16 9 0
2696185 고죠 부활하니까 전세계트래픽 1위 ㄷㅅㄷ ♥냥덩배달왔습니당♥갤로그로 이동합니다. 05.16 29 0
2696184 지금 만드는 토이 프로젝트 딸깍 하면 인공지능이 해주는데 프갤러(121.186) 05.16 21 0
2696183 미래의 어느 역사학자들의 대화라는데 프갤러(211.241) 05.16 13 0
2696182 카시트 침대 발명도둑잡기갤로그로 이동합니다. 05.16 6 0
2696180 ㅎㅍㄴㅅ야 좋은 음악 추천해줄게 [4] 딱국(113.198) 05.16 28 0
2696179 백엔드 현실 연봉 얼마냐? [6] ㅇㅇ(223.38) 05.16 116 0
2696178 오늘의 발명 실마리: 가짜 꼬리 항문 괄약근으로 조종하는 장치 발명도둑잡기갤로그로 이동합니다. 05.16 8 0
2696177 나는 영혼을 담는다구 ㅇㅇ(118.235) 05.16 9 0
2696176 프론트엔드 면접관 들어가는 애들 들어와봐 [7] 프갤러(221.150) 05.16 100 0
2696175 잡코리아에서 그냥 공고 확인도 안하고 체크하고 일괄지원했다 프갤러(112.150) 05.16 15 0
2696174 나님 주무시기전 소통합니당❤+ 질문받아양✨ [3] ♥냥덩배달왔습니당♥갤로그로 이동합니다. 05.16 22 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2