limy
10
2019-11-12 16:16:17
3
423

Synchronous와 Asynchronous를 두 가지 관점에서 설명하던데, 어느 쪽이 더 나은 설명인지 궁금합니다.


안녕하세요,  Python으로 비동기 코드를 작성하기 시작하면서

Synchronous, Asynchronous, Blocking, Non-Blocking에 대한 용어 정리를 하고 있습니다.

그런데 Synchronous, Asynchronous에 대해서는 여러 자료들이

[작업 순서를 담보할 수 있는지]

[호출자와 호출당한자 둘 중 누가 완료를 체크하는가]

이렇게 두 가지 다른 관점에서 설명을 하더라구요. 두 정의가 서로 얽혀 있는 것 같긴 한데,

누군가 저에게 한 문장으로 설명하라고 하면 어느 쪽의 정의를 택해야 할 지 모르겠습니다.

아래 글은 정리한 글의 일부인데요, 혹시 좋은 의견이 있으시다면 꼭 고견을 듣고 싶습니다 ㅠ


> Synchronous



      > Asynchronous

      • 여기서도 Synchronous와 같이 두 가지 키워드로 설명되는데..
        • 작업의 순서가 보장되지 않음 : Asynchronous는 엄밀히 말하면, 작업들이 공통적으로 사용하는 global clock이 없고, 신호나 메세지의 도착 시간이 작업의 신뢰성에 영향을 미치지 않음을 뜻한다. 즉 작업의 순서가 보장되지 않는다.(A,B,C 순서로 실행되었으나 완료도 A,B,C 순서일 것이라 보장할 수 없음)
          • 신호나 메세지의 도착 시간이 작업의 신뢰성에 영향을 미치지 않음, 즉, 각 작업이 서로 연관되지 않아서 분리될 수 있으며, 작업 지연시간이 큰 경우에 잘 활용될 수 있다. (DB 접근, Http 요청, File I/O 등)
        • Callee가 자신의 완료 상태를 확인하며, callback으로 Caller에게 자신의 완료를 알림
          • 좋은 예시 : 상사가 와서 어떤 일을 처리하라고 말한다. 그리고 다른 일 하러 가버림. 일을 다 끝내면, 나는 상사에게 “나 다함!” 이라고 말한다.
      0
      • 답변 3

      • __jj__
        628
        2019-11-12 20:29:01
        caller나 callee가 완료를 체크하려는 목적이 무엇일까요?
        그건 완료 여부가 다음 작업에 영향을 미치기 때문입니다.
        즉 반드시 caller가 callee의 작업이 완료 된 후에 수행하여야 하기 때문에 통보를 받는 것이고  이후 다음에 작업을 이어 간다면 그게 바로 순서보장이지요.

        callee가 통보하는 부분은 좀 애매합니다. callee가 통보 해도 되고 안해도 되거든요.통보가 중요한게 아니라 caller에게 callee의 완료여부가 의미가 있는가 없는가의 문제죠. 

        caller와 callee 관점에서의 설명은 어찌보면 단편적인 부분만 설명한 것으로 순서보장측으로 설명하는 것이 더 상세하게 설명이 될거 같네요.
      • limy
        10
        2019-11-13 09:27:31
        __jj__님 정말 감사합니다. 명쾌하게 이해가 되었습니다!
      • __jj__
        628
        2019-11-13 09:35:34

        반대로 caller가 callee에게 통보할 수도 있습니다.

        중요한건 병렬처리중인 두개 이상의 프로세스 혹은 쓰레드간에 각각의 절차의 진행을 위해 서로 신호나 데이터를 주고 받는가 아닌가. 

        이것이 sync와 async 인 거죠.

      • 로그인을 하시면 답변을 등록할 수 있습니다.