2015년 2월 2일 월요일

동기와 비동기 개념

목차


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

동기(synchronous)

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

똑같이 움직이는 것이다

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

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

비동기(asynchronous)

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

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

개념정리

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

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

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

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

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

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

Written with StackEdit.

Related Posts:

  • 입출력 스트림의 개념스트림 어느 한 방향으로의 물결, 흐름을 의미한다 우린 인생스트림을 나아가고 있다고도 할 수 있다 하지만 구체적으로는 추상적 의미보단 놀이동산에 줄지어 서 있듯이, 혹은 은하수처럼 뭔가의 물체들이 끊김없이 늘어서 있는 것이라고 볼 수 있다. 프로그램에서는 통로, 길의 의미가 가장 적합하다 입출력 스트림 InputStream 과 OutputStream 은 말그대로 입출력하는 통로, 길을… Read More
  • xpath 의 개념과 문법목차 xpath의 개념 xpath의 Node xpath 문법 element xpath의 개념 우린 파일을 찾을때 탐색기를 이용한다 탐색기는 미지의 장소를 그냥 탐험하는게아니라 길, 즉 path를 따라가서 원하는 곳을 찾아내는데 C:\windows\System32\important\왜가리 위와 같은 형식이고 이것이 윈도의 path 문법이다 마찬가지로 xml도 원하는… Read More
  • ByteArrayOutputStream 사용먼저 outputstream 이니 개념부터 보는 것이 좋다( 링크 - 입출력 스트림의 개념 ) ByteArrayOutputStream는 실질적으로 저장소로 사용된다 즉, 바이트 배열 저장소나 다름없다 왜 byte[]에 저장하지 않고 번거롭게 저기다가 저장하는 것일까 사실은 ByteArrayOutputStream 역시 byte[]에 저장한다 내부적으로 byte[]에 저장하고 그걸 새로운 데이터… Read More
  • 프로그래밍에서 용어와 영어의 중요성이름 짓기 프로그래밍을 배우면서 영어권 애들이 진짜 부러웠던게 바로 이 언어문제다. 어떤 프로그래밍 용어든.. 그것이 선정될 때는 개 이름 짓듯이 별탱이, 다롱이처럼 하지 않고 가장 그것의 용도를 적합하게 나타내는 이름으로 짓는다 그래서 용어가 자국어인 사람들은 훨씬 빨리 이해하고 배울 수 있다 영어권이 아닌 나라들 그럼 영어권이 아닌 나라들은? 당연하지만 번역해서 쓴다 그중에선 도저… Read More
  • Git 시작하기Git 버전 관리 시스템의 개념 버전 관리 시스템 Git는 사실 어렵지 않다. 하지만 어려워 보인다 그 이유는 무지 어려워 보이는 용어 이미 익숙해진 사람들이 개념대신 자신이 사용하는 방법을 가르침 요렇게 두가지가 있다고 본다 그래서 그걸 쉽게 한번 풀어 보겠다 먼저 버전 관리 시스템 버전(version) 이란 ~~판을 말한다. 쉽게 말해 ‘초판, 개정판’라고 들어봤을 것이다 … Read More

댓글 6개 :

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

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

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

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

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

    답글삭제