-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
Async, Await
21.04.26 22:51 작성 조회수 338
1
안녕하세요. [Async, Await] 강의 부분에서 12:20 부분에 break point를 잡고 확인해 볼때 저는 스레드하나가 나올줄 알았는데 작업자 스레드 하나가 생겨서 혼란이 왔습니다. 그러면 주 스레드와 작업자 스레드가 둘이 일을 처리하고 있다는건데, 이러면 멀티스레드로 작동되고 있는것 아닌가요? 앞에 설명에서는 Async,Await이 하나의 스레드로 비동기식으로 왓다갓다하면서 일을 처리한다고 이해를 해서요.
답변을 작성해보세요.
1
Rookiss
지식공유자2021.04.27
async, await는 멀티쓰레드랑 직접적인 상관은 없으며
유니티의 코루틴처럼 코드를 비동기로 실행시키는 것입니다.
관련하여 다음 글을 읽어보면 도움이 됩니다.
https://blog.stephencleary.com/2013/11/there-is-no-thread.html
Task task = 무엇무엇; 으로 Task를 만들면 비동기로 실행하는 일감을 묘사한 것이고,
해당 task가 끝나야 다음 코드를 진행해야 한다면
await task를 하면 되는데
일종의 만남의 장소(?)가 정해진 셈이 됩니다.
12:20 코드는 아직 완성된 것이 아니며
저렇게 TestAsync를 생으로 호출하기보다는
static async Task TestAsync(); 와 같이 TestAsync도 Task를 반환하게 해준 후,
Main 에서도 await를 해주는 식으로 만들어야 합니다.
async/await 자체가 멀티쓰레드를 개입시키는 것은 아니지만,
Task.Run과 같이 쓰레드풀의 다른 쓰레드를 개입시키는 행동을 하면
멀티쓰레드로 잠시 돌아갈 수는 있습니다.
한마디로 비동기는 [싱글쓰레드/멀티쓰레드] 양쪽 상황 모두 상관없지만
그렇다고 비동기 = 멀티쓰레드라고 생각하면 절대 안 됩니다.
답변 2