2015년 2월 2일 월요일

동기와 비동기 개념

목차


동기와 비동기는 완벽하게 용어적으로 차이가 있지만
실제 그 차이가 뭔지는 이상하게도 파악하기가 쉽지 않다
그래서 동기와 비동기의 차이점과 개념을 정리해 보았다

동기(synchronous)

싱크로 되었다.. 라는 말은 들어본적이 있을지도 모른다
더 쉽게 싱크로나이즈드 스위밍은 들어봤을 것이다
동기
이런거다

똑같이 움직이는 것이다

하지만 프로그래밍에서의 동기화란 현실과 좀 차이가 있다
현실에서의 동기화란 둘이 나란히 발을 맞춘다
정확하게는 속도를 서로간에 조절해서 일정한 속도로 나아가게 된다
그리곤 따뜻한 미소를 교환한다

컴터의 경우는 그딴 것 없다. 차가운 미소를 지은후 A 프로그램이
초고속으로 혼자가버린다. B 프로그램은 열심히 따라가는 수밖에 없다
그럼 이딴게 무슨 동기화인가 싶을 것이다
앞서 말했듯이 현실과 다른 방법으로 동기화를 한다
예를들면 토끼와 거북이처럼 토끼가 낮잠을 처자줌으로써 거북이와 만나게 되듯이
어느지점에서 강제로 한쪽이 다른 한쪽이 올때까지 대기하게 되는 것이다.

비동기(asynchronous)

현실에서 비동기는 엇박자가 나는 것을 말하지만
역시나 프로그래밍에서 비동기도 좀 다르다.
프로그래밍에서의 비동기는 그냥 각자 갈길을 가다가
‘살아있냐?’ 라는 뜬금포 메세지를 날리는 것을 말한다
혹은 불의의 일격을 당한다고 생각해도 된다

그래서 데이터를 비교적 안정적으로 받을 수 있는 동기식과 달리
비동기식은 상대방에게 스파이를 심어놔서 데이터가 넘어올때
통보가 오도록 조작해야한다

개념정리

둘의 공통점은 대기를 타던, 불의의 일격을 날리던
서로간에 데이터는 주고 받는다는 것이다.
전혀 관계없이 따로따로 논다면 애시당초 동기니 비동기니
그런 구분조차없다.

즉, 데이터를 받는 방식을 말하는 것이 바로
동기식과 비동기식이다.
말해줄때 데이터를 받는 두가지 방식! 이렇게 말해주면 땡스하지만
단순히 비동기 프로그래밍.. 이런식이라 이해가 어려웠던 것이다

또한 현실에선 정보를 주고 받는데 이 둘에 차이를 둘 의미가 없을만큼
편하게 주고 받는다. 그래서 더욱 이해가 어렵다

실상 프로그래밍의 세계가
구리고 원시적이고 말미잘지능의 미개한 세계라서
커뮤니케이션에 목숨을 걸어야한다는 것을 알기전엔 말이다

서로 하이파이브 한답시고 힘껏 손을 날렸는데
상대는 아직 주머니에서 손을 빼지도 않은 비동기 상태여서
귀싸대기 맞는 엄청난 에러가 시도때도 없이 발생하는 세계라는 것이다
(다른 말로는 Null pointer 에러라고도 한다-ㅅ-;;;
객체도 안만들었는데 데이터 날아와서 개망)

즉, 이쪽의 사람지능이 하이파이브할려고 손들면
저쪽의 사람지능이 알아서 손을 빼드는 뛰어나고 아름다운게 현실세계라면
플그램 세계는 인형 두개 가지고 이쪽 손 내가 들게 하고
저쪽 손도 내가 들어서 정확한 타이밍에 하이파이브 시키게
끙끙대야한다는걸 명심하자

Written with StackEdit.

댓글 6개 :

  1. 설명이 재밌네요. 블로그도 굉장히 깔끔하군요.

    답글삭제
  2. 아, 완벽한 이해와 함께 웃으면서 잘 봤습니다.

    답글삭제
  3. 후후 재밌게 읽고 갑니다

    답글삭제
  4. 재밌게 읽고 가요 ㅋㅋ 구리고 원시적이고 말미잘지능의 미개한 세계에서 허덕이다가 웃다 갑니다.ㅋㅋ

    답글삭제
  5. 재밌게 읽고 가요 ㅋㅋ 구리고 원시적이고 말미잘지능의 미개한 세계에서 허덕이다가 웃다 갑니다.ㅋㅋ

    답글삭제