강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của briancjkim910559
briancjkim910559

câu hỏi đã được viết

[Tìm hiểu qua hình ảnh] Hiểu biết trực quan nhất về các khái niệm đồng bộ (sync) và không đồng bộ (async)

Hiểu khái niệm đồng bộ và không đồng bộ.

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

Viết

·

971

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실행

asyncsync

Câu trả lời 1

4

allen님의 프로필 이미지
allen
Người chia sẻ kiến thức

안녕하세요 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뒤에 실행될 수도 있겠죠.

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

감사합니다. :)

Hình ảnh hồ sơ của briancjkim910559
briancjkim910559

câu hỏi đã được viết

Đặt câu hỏi