• 카테고리

    질문 & 답변
  • 세부 분야

    기타 (개발 · 프로그래밍)

  • 해결 여부

    미해결

비동기함수에 콜백함수는 어느 스레드에서 실행되나요?

21.01.05 18:43 작성 조회수 586

1

쓰레드 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뒤에 실행될 수도 있겠죠.

이정도면 답변이 될 것 같은데.. 혹시 더 궁금한 점이 있으시면 다시 질문주세요!

감사합니다. :)