inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[그림으로이해하는] 동기(sync) 비동기(async)의 개념에 대한 가장 직관적인 이해

동기 비동기의 개념에 대해서 이해해봅니다.

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

976

lolola

작성한 질문수 19

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

async sync

답변 1

4

앨런(Allen)

안녕하세요 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