티스토리 뷰

♣♧♣♧

약간의 주저리주저리

네트워크나 컴퓨터 관련해서 많이 듣는 단어 동기, 비동기...

많이 듣는데 뭐지? 하다가

찾아보았다.

설명을 들었지만 얕게 간단히 듣고(자세히 설명을 들었어도 아예 이쪽에 대해 모르는 내 기억속엔 간단히 마침표정도 남았으니깐..) 까먹어서 다시 찾아보는 중이다.

 

어..

일단

 정보통신 용어사전

동기: 신호 주파수 혹은 위상이 비교 신호의 그것과 어느 정상적인 관계에 있는 것을 말한다. 일반적으로 동기를 취할 대상 및 수단을 나타내는 용어를 예로 들면, 위상 동기(位相同期), 스텁(stuff) 동기, 클록(clock) 동기, 프레임(frame) 동기 등으로 사용된다. 여기에서는 구체적인 예로서 PCM 전송에 ...
http://terms.naver.com/entry.nhn?docId=796292&cid=42347&categoryId=42347

응 다음

컴퓨터 인터넷 IT 용어 대사전

동기: 여러개가 있을 떄 서로 시간적인 관계가 일치해 있는 것을 말한다.

http://terms.naver.com/entry.nhn?docId=838770&cid=50376&categoryId=50376

전기 용어 사전

동기: 전동기가 부하 등의 변수에 의존하지 않;미ㅏㅇ널;ㅣ마미ㅏ어;ㅣㅏㅓㅁㄴ이럼

http://terms.naver.com/entry.nhn?docId=589402&cid=50324&categoryId=50324

전자 용어 사전

동기 통신: 데이터 통신에서 직렬 전송을 하기 위해 일정한 클록 펄스에 동기시켜 데이터의 송수신을 하는 방식. 동기를 확립시키는 방법으로는 비트 동기, 캐릭터 동기, 프레임 동기 등이 있다. 비동기 통신에 비해 전송 효율은 높다.

비동기 통신: 타이밍을 생각하지 않고 데이터를 전송하는 방식의 통신을 말한다. 시작-정지(조보) 동기방식의 통신에서는 송수신 측에서 동기를 취할 필요는 없다.

http://terms.naver.com/entry.nhn?docId=1013254&cid=50373&categoryId=50373

 직렬전송?

데이터 통신에서 복수 비트(보통 8비트)로 구성되어 있는 데이터를 직렬의 비트열로 바꾸어 송수신 하는 방법, 직렬의 비트 열에서 데이터를 재현하기 위해서는 비트열의 구절을 식별할 필요가 있으며, 그 방법에 따라서 비동기 통신(조보 동기)과 동기 통신이 있다. 후자 쪽이 전송 효율이 높다.

http://terms.naver.com/entry.nhn?docId=758644&ref=y&cid=50324&categoryId=50324

직렬전송은 동기 통신과 연결되나? 몰라 몰라

여기저기서 아무말이나 동기라고 하네.. 저게 다 무슨소리지...

 

이상 멍멍멍..

 

♣♧♣♧

그래서 내가 알고싶었던 동기와 비동기는 무엇이냐면

참고로 사전에서 찾아보았을 때에도 여러가지로 동기가 쓰이는 것 처럼 내가 보고 공부한 동기도 이렇게 쓰이는 동기 저렇게 쓰이는 동기가 섞여있는 것 같다.

쥐도 새도 모르게 이 동기 사이에 저 동기를 넣고 스까먹었다.

 

동기

Synchronous 라고 쓰고 뜻은 동시에 일어나는.

말그대로 동시에 일어난다는 말이다.

요청과 그에따른 결과가 동시에 일어난다.

비동기

Asynchronous 라고 쓰고 뜻은 동시에 일어나지 않는.

요청에 따른 결과가 그 자리에서 동시에 일어나지 않는다.

-

동기는 요청을 했다면 그에 따른 결과를 받고나서야 다른일을 하는것. 맡은 하나에 충실한 것

비동기는 요청을 했어도 또 다른 요청을 하는등 결과가 오기만을 기다리지 않고 할일 하고 있다가 결과가 오면 받거나 이런.. 시간을 유연하게 사용하는것

-

명령이 끝날 때까지 사용자에게 제어권을 돌려주지 않는 것이 동기,

명령이 끝나기 전에 사용자에게 제어권을 돌려주는 것이 비동기

 -

동기 방식은 설계가 매우 간단하고 직관적이지만, 결과가 주어질 때까지 아무것도 못한다.

비동기 방식은 좀더 복잡하지만 결과가 주어지는 시간동안 다른작업을 할 수 있으므로 시간사용에있어 효율적이다.

-

그러면 이런것일까?

장치가 하나있다.

  

바퀴를 굴릴 수 있고

폭죽을 터뜨릴 수 있다.

 

장치에게 얼마간 달려라 하고 달리기가 끝나면 폭죽을 터뜨리고

폭죽을 터뜨리면 다시 달려라 하고

달리기가 끝나면 폭죽을 터뜨리고

폭죽을 터뜨리면 다시 달리게 ㅎ

이렇게

한 가지의 작업이 끝나기를 기다렸다가 다음작업을 시작하면 동기

프로그래스바로 나타내어 보자면

 

 

이렇게 얼마의 시간동안 움직이라고 해놓고

움직임이 끝나지 않았는데 폭죽을 터뜨릴 수 있게하는것이 비동기 

장치가 명령을 다 수행하지 않았어도 새로운 명령을 내린다.

프로그래스바로 나타내어 보자면

 

 

클라이언트, 서버간에 데이터를 주고받는일(클라이언트는 작업을 요청, 서버는 응답) , 즉 통신에 있어 상황에 따라 동기, 비동기 방식을 결정하는 것은 꼭 필요한일

데이터를 주고받는 일 자체가 통신이니까 어떻게 주고받을 건지에 따라 반드시 그에 맞는 통신방식을 선택해주어야 하겠다.

 

a b 두 대상이 있을 때

동기: a가 b에게 데이터를 요구하고나서 b가 요청에 응답을 주어야만 a가 작업을 가능하게 하는것

클라이언트의 요청이 있어야만 서버가 응답을 보내고 해당 응답이 서버에서 와야 그에 따라 클라이언트가 반응한다.

폴더의 자료를 최신으로 유지하는 것을 보면 클라이언트에서 자료 갱신 요청하고 서버에서 최신 자료를 보내주는 식의 응답을 하면 클라이언트에서 받아서 갱신하는 것

즉 서버와 클라이언트의 작업을 하나로 일치시킨다.

두 개의 장치 안의 자료가 시간적으로 일치해야 할 때 꼭 필요하다.

비동기: a가 b에게 데이터를 요구하고나서 b의 응답을 기다리지 않고 다른작업을 처리할 수 있게 하는 것

 

카카오톡을 예로보면

내가 한 마디하고 상대방이 글을 확인하고 한 마디하거나 다음으로 넘겨라 이런 신호를 보내지 않고도 내가 또 한마디 할 수 있다.

그리고 용량이 큰 영상을 보내는 중에 메세지를 보내면 영상이 다 가지 않아도 메세지가 먼저 보내지는것이 가능하다.

그러므로 비동기

 

동기 시스템을 사용하는 예로는 은행계좌 입출금 시스템이 있다.

- 시간적으로 데이터가 일치해야 한다.

cd기에서 출금을 한다면 은행의 중앙컴퓨터에서는 해당시간에 반드시 해당 금액만큼 빠져있어야 한다.

 

그렇다면 구글 드라이브의 백업및 동기화 프로그램 (Backup and Sync from Google)도 이런 이런 이런 그런 그런 그런 그런 거겠지? 

매우 유용하게 잘 쓰는 중인데

내 컴퓨터에 있는 파일을 드라이브에 동기화 할 수도 있고

드라이브에 있는 파일을 내 컴퓨터에 동기화 할 수도 있다.

나는 전자를 사용중인데 지금 문득확인해보았느데 드라이브용량이 거의 다 차버렸네 .. ㅋㅋㅋㅋ

전자는 컴퓨터의 파일이 추가되거나 하면 드라이브도 갱신되는

 

일반 소프트웨어에서

동기: 어떤 루틴을 완전히 끝내고 제어를 반납하는것

비동기: 동작이 끝나지 않았어도 일단 제어권을 반납한 후 본인의 할 일을 계속하는것

파일조작에 있어서

파일조작이 완전히 끝난 후 다음 동작을 하면 동기식,

다음 코드를 진행하면서 파일 조작을 하면 비동기식.

 

비동기식은 dos 같은 단일 운영체제에서는 근본적으로 불가능, windows같은 멀티태스크 환경에서만 가능하다.

특정 요청을 처리하는데에 컴퓨터가 단 몇초 또는 1초도 안걸린다고 해도

컴퓨터는 그 시간동안 

n초 * 1초당 컴퓨터자신의 cpu헤르츠 만큼의 일을 할 수 있으니 결과만 기다리는 것 보다 다른 일을 처리하고 있는것이 효율적이다.

따라서 윈도우 같은 멀티테스크 환경에서 동기식 처리는 시스템 효율이 별로..

실제 cpu가 느려지는 것이 아니지만 어떤일을 할 때 다른 작업을 처리할 수 있는 능력을 써먹지 않고 그냥 놀리는것. 

 

파일조작에서는 cpu 속도와 하드, 플로피 등의 저장매체와는 엄청난 속도차가 있기 때문에 비동기처리를 해도 대용량 data 를 읽거나 쓸 때 일시적으로 시스템이 버벅인다.

 

블로킹 논 블로킹에 관한 내용 약간

관련해서 블로킹(blocking), 논블로킹(non-blocking) 이라는 단어도 많이 보았다.

블로킹: 작업이 중단된다. 네트워크 통신에서 요청이 발생하고 완료될 때까지 모든 일을 중단한 상태로 대기해야 하는것.

블로킹 방식의 소켓통신은 결과가 올 때까지 다른 작업을 중단하고 하염없이 기다린다.

논 블로킹: 중단되지 않는다. 블로킹과 반대개념.

통신이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있으므로 경우에 따라 효율이나 반응속도가 더 뛰어나다. 반면에 좀 더 설계가 복잡해진다는 단점이 있다.

 

Node.js 관련 글을 읽어보았다.

싱글 스레드와 동기 이렇게 연결을 딱 지을 수 있을 거라 잠시 생각했는데 그것이 아니다.

하나의 요청을 받으면 수행하다가 i/o작업을 던져놓고 다른 요청을 수행한다.

비동기 식으로 요청 받은 작업들은 이런 과정으로 수행하게 되는데... 라고 한다.

신기하군

node.js가 무엇인가 등

https://blog.perfectacle.com/2017/06/18/what-is-node-js/

http://asfirstalways.tistory.com/43

http://leechoong.com/posts/2017/Nodejs_SyncAsync

https://wayhome25.github.io/nodejs/2017/02/18/nodejs-06-Asynchronous-synchronous/

 

심화 내용

대부분의 응용프로그램들은 메서드를 비동기적으로 호출한다. 이렇게 하면 메서드 호출이 실행되는 동안 응용프로그램이 유용한 작업을 계속 할 수 있기 때문.

뭐 이런내용..

위의 내용 한번 정리하고 읽어보면 읽을만

https://docs.microsoft.com/ko-kr/dotnet/framework/wcf/synchronous-and-asynchronous-operations

블로킹 논블로킹과 동기 비동기를 비교한 글

https://nesoy.github.io/articles/2017-01/Synchronized

 

주요 출처

댓글