비동기함수에 콜백함수는 어느 스레드에서 실행되나요?
976
작성한 질문수 19
쓰레드 1에서 B,C,D
스레드2에서 비동기함수 A 를 실행하고있습니다
스레드2에 비동기함수 A가 완료되서 A의 콜백함수 A'가 실행되는데 이거는 스레드1으로 돌아와서 실행되나요 아니면 스레드2에서 실행되나요?
스레드1에서 실행되면 스레드2에서 온 콜백함수가 스레드1에서 진행중인 작업들보다 먼저실행되나요?
ex)
스레드1: B,C,(스레드2에서 A완료, A'가 스레드1으로돌아옴), A'실행,D실행
답변 1
4
안녕하세요 lolola님 !
좋은 질문 감사합니다 :)
기본적으로 A' 콜백함수는 스레드2에서 실행된다고 생각하시면 됩니다. (비동기함수 A를 스레드 2로 보냈고, 콜백함수는 결국에 A작업의 끝에 붙어있는 작업처럼 동작합니다. 콜백이라는 이름에서도 알 수 있듯이, call을 back하는.. 다시말하면 A라는 작업후에 어떤 결과로 해당 함수를 다시 실행하는 것이니 기본적으로는 스레드2에서 동작합니다.)
그런데 여기서.. (언어마다 조금씩 좀 다르겠지만..)
A' 콜백함수를 다시 스레드1로 보내는 방법들이 존재합니다. (스레드1에서 실행해야하는 이유가 있을 경우, 보통은 다시 내부에서 해당 콜백함수를 스레드1로 보내는 처리를 해줍니다.)
그리고 마지막
==========================================
스레드1에서 실행되면 스레드2에서 온 콜백함수가 스레드1에서 진행중인 작업들보다 먼저실행되나요?
ex)
스레드1: B,C,(스레드2에서 A완료, A'가 스레드1으로돌아옴), A'실행,D실행
==========================================
이 부분에 대해서 말씀을 드리자면, 개발자는 그 순간을 정확히 알 수없습니다. (여러가지로 코드로 실험해 보시면 그때그때 마다 다르게 나옵니다..)
아마 그런 의도로 작성하신 것 같은데.. B작업이 끝나는 순간에 스레드1로 돌아오면 B작업 다음에 실행될 수도 있고, C작업이 끝나는 순간에 스레드1로 돌아도면 C작업 다음에 시작 될 것입니다. 만약에 작업 B,C,D가 비동기작업A에 비해 상대적으로 아주 짧은 작업이라고 치면 B,C,D뒤에 실행될 수도 있겠죠.
이정도면 답변이 될 것 같은데.. 혹시 더 궁금한 점이 있으시면 다시 질문주세요!
감사합니다. :)
async pending상태의 promise객체
1
151
2
spring sync connection reset
0
375
3
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
0
1708
1
EF사용시 async사용
0
256
1
async return 자료형이 Promise인 설징에 대한 질문
0
704
2
섹션 15 동기와 비동기의 개념 질문있습니다
0
432
1
비동기 프로그래밍 관련 질문입니다.
1
674
1
Django Unit Test에서 Async Task 시 Default DB 사용 이슈
1
412
1
Dart의 비동기 함수에 대한 aysnc, await 질문입니다.
1
811
2
build.gradle에서 implementation 'gun0912.ted:tedpermission:2.2.3' sync가 되지 않아요...
0
3906
2
안녕하세요 선생님!! 장고 엑셀다운로드 로딩에 대하여 질문드립니다
0
579
1
함수를 async를 사용하여 비동기로 작성한 이유가 궁금합니다.
2
335
0
await 원리 질문 드립니다
2
348
1
큐로 sync하게 호출하는 이유가 궁금합니다
2
264
1
비동기 방식에 대해 질문올려봅니다.
1
248
1
비동기 API 호출 질문드립니다.
0
220
1
async await 질문드립니다!
1
330
1
createBlog가 await하는 동안
3
306
3
async와 blocking
2
530
1





