일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Android
- androidstudio
- bitmap
- BOJ
- Canvas
- CS
- Database
- DBeaver
- DP
- Ecilpse
- Eclipse
- firebase
- git
- github
- GooglePlayServices
- gradle
- IDE
- IntelliJ
- java
- json
- kotlin
- level2
- linux
- mariadb
- MYSQL
- Paint
- permission
- python
- Sorting
- sourcetree
Archives
will come true
동기(Synchronous)와 비동기(Asynchronous) 본문
728x90
동기, 비동기 라는 단어는 데이터 통신 및 네트워크 분야를 공부하다 보면 등장하는 개념이다. 둘 다 데이터를 요청하는 쪽과 요청받은 데이터를 처리·전달하는 쪽 간의 데이터를 주고받는 방식을 일컫으며, 이 데이터 전달 방식의 차이에 따라 동기/비동기가 나뉜다. 두 단어의 사전적 정의는 아래와 같다.
- 동기(synchronous)
- 동시 발생[존재]하는
- 실시간의 (강의가 따로 녹음되거나 미리 올라와 있는 형태가 아니기 때문에 실시간으로 참여해서 운영되는 형태의)
- 주기적인 운동을 하는 개체들이 서로 영향을 주고받거나 받게 됨으로써, 동일한 주기를 갖게 되는 것. 그러한 현상을 동기현상이라 하고, 동기된 상태를 동기화 되었다고 한다.
- [통신] 주로 서로 다른 시스템이나 네트워크에서 클럭 주파수나 비트, 프레임, 워드 등을 일치시키는데 사용된다.
- [쓰레드] 작업을 순차적으로 처리하는 것.
- 비동기(asynchronous)
- 동시에 발생[존재]하지 않는
- 실시간 교육이 아닌 (정시에 이루어지는 교육이 아니어서 학생들이 자신의 일정에 맞춰 수업을 듣거나 과제를 올릴 수 있는 형태의)
- [쓰레드] 동시에 여러 작업을 처리하는 것.
동기(Synchronous)
- 요청과 그 결과가 동시에 일어난다는 약속.
- 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 한다.
- 노드 사이의 작업 처리 단위를 동시에 맞추겠다.
- 요청과 결과가 동시에 발생한다. 무슨 작업이든 요청이 결과보다 먼저 발생하니까, 요청-결과가 동시에 발생한다는 말은 요청이 결과의 타이밍을 기다려준다는 것과 같다.
- 같은 일을 동시에 진행해야 하는 작업에는 동기 방식을 사용해야 한다.
e.g.) 계좌이체 : A가 B에게 10,000원을 송금할 때 A계좌-10,000원 / B계좌+10,000원 두 일이 동시에 발생해야 한다.
동기 방식의 장단점
- 장점👍 : 설계가 매우 간단하고 직관적이다. (요청-결과 한 세트로 처리되니까)
- 단점👎 : 요청에 대한 결과가 주어질 때까지 아무것도 못하고 대기해야 한다.
비동기(Asyncronous)
- 요청과 그 결과가 동시에 일어나지 않을거라는 약속.
- 요청한 그 자리에서 결과가 주어지지 않는다.
- 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.
- 서로의 작업 목적이 다르면 둘의 작업 처리기간이 일치하지 않아도 된다. 즉, 비동기는 각자가 추구하는 행위가 다를 수도 있고, 동시에 일어나지 않을 수도 있다.
비동기 방식의 장단점
- 장점👍 : 요청에 대한 결과가 주어지는 데 시간이 걸리더라도 그 시간동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있다.(*동시성)
- 단점👎 : 처리 로직이 동기보다 복잡하다.
A가 B에게 행위를 요청하고, B가 이에 응답해 완수한 결과를 A에게 돌려주기까지 일련의 작업 흐름이 아래와 같을 때,
- A가 B에게 자신의 데이터를 넘기며 결과를 요청
- B가 A의 데이터를 읽어들여 연산 수행
- B가 A에게 결과를 반환
비동기에서는 A가 요청을 던진 후인 2~3 단계 시점에 A는 B와 전혀 상관없는 개인 작업을 진행할 수 있다. B와 관련된 작업은 1이 끝나는 시점에서 이미 A의 손을 떠난 셈이다. 이런 특성 탓에 비동기와 동시성 프로그래밍이 함께 언급되는 것이다. (=비동기 방식을 사용하면 동시성 프로그래밍을 실현할 수 있다.) 만약 동기 방식이었다면 B가 결과를 내고 A에게 돌려주기 까지의 2~3단계 동안 꼼짝없이 결과를 무한정 기다리고 있어야 한다.(B의 결과가 나오기 까지 시간이 얼마나 오래 걸리든)
동기와 비동기 비교
동기 | 비동기 | |
자원 사용률 | 비효율적 | 효율적 |
복잡도 | 낮음 | 높음 |
728x90
'Etc.' 카테고리의 다른 글
JSON 데이터, 문법 (0) | 2022.02.25 |
---|---|
[CS] 스레드(Thread) 개념 정리 (0) | 2022.01.17 |
[IntelliJ] 인텔리제이 단축키, Live Template 사용법 (0) | 2021.12.05 |
[IntelliJ] 프로젝트 빌드 시 "java: warning: source release 11 requires target release 11" 에러 해결 (1) | 2021.11.27 |
[IntelliJ] Eclipse에서 프로젝트 가져올 시 "Imported project refers to unknown jdks ~" 에러 해결 (0) | 2021.11.26 |
Comments