Computer Science/Network

[Network] Async & Sync (비동기와 동기)

검은 까마귀 2024. 1. 22. 14:25

간간히 네트워크 관련해서 포스팅을 진행했다. 가장 재밌게 했던 글을 썼던건 아마 loadBancler였다. 항상 뭔가 주먹구구식 외우기 공부였다면, 사실 로드밸런싱을 공부를 하면서 꼬리에 꼬리를 무는 질문들을 많이했던거 같다.

2023.12.28 - [Computer Science/Network] - [Network] Load Balancer(부하 분산 장치)

 

[Network] Load Balancer(부하 분산 장치)

#개요 이번에 프로젝트를 하다 로드밸런서가 무엇인지 정확히 잡고 넘어가야했다. 네트워크쪽에서는 자주 등장하는 용어이고 사용하는 장치이다. Load Balancer(부하 분산 장치) 즉, 로드밸런서라

blaj2938.tistory.com

2023.09.14 - [Computer Science/Network] - [Network] OSI 7 Layer(OSI 7 계층)

 

[Network] OSI 7 Layer(OSI 7 계층)

# 목적 OSI 7 Layer는 무엇일까요? 일종의 네트워크의 표준 모델이라고 합니다 표준화의 이유는 "네트워크 장비를만드는 회사가 이러한 지침대로 장비를 만들면 다른 회사 장비여도 상호 호환성을

blaj2938.tistory.com

2023.09.14 - [Computer Science/Network] - [Network] TCP/IP (Transmission Control Protocol/Internet Protocol)

 

[Network] TCP/IP (Transmission Control Protocol/Internet Protocol)

TCP/IP 는 무엇일까요? 인터넷을 사용하는 모든 통신의 기본이 되는 프로토콜 프로토콜이 한 개만 있는 것이 아닌 여러가지 프로토콜의 조합 TCP/IP를 기반으로 BAN,PAN,MAN,WAN 구간의 장치들이 데이터

blaj2938.tistory.com

사실 네트워크는 뭔가 꾸준히 발전하고 있어서 따라가기가 힘들고 생각보다 계산하는 과정이 많아서 복잡한데 꼭 한번씩 실습을 할때마다 OS마냥 나의 발목을 잡곤 한다.

 

이번에는 살짝 어려운 이론중 하나인 비동기 , 동기에 대해서 알아보도록하겠다.

# Sync ? Async? 왜?

우리가 OS를 하면서 동기화를 이야기한 적이 있다. 어디서 였는지 한번 기억해보자.....!

 

바로 뮤텍스와 세마포어 였다. 우리가 그때 왜 동기화를 했을까?

2024.01.11 - [Computer Science/Operation System] - [OS] Semaphore(세마포어) & Mutex(뮤텍스, Mutulal Exclusion)

 

[OS] Semaphore(세마포어) & Mutex(뮤텍스, Mutulal Exclusion)

2024.01.10 - [Computer Science/Operation System] - [OS] IPC(Inter Process Comunication) - 프로세스간 통신 [OS] IPC(Inter Process Comunication) - 프로세스간 통신 이어서 IPC(Inter Process Comunication)에 대해서 알아보겠다. 먼저

blaj2938.tistory.com

 

바로 공유하는 공간속에서 데이터간 일관성을 유지하기 위한 방법이였다. 어떤식으로 했냐면, 한쪽에 lock을 걸고 다른쪽에서는 데이터를 보냈다.

네트워크의 동기도, 뮤텍스의 동기도 공통점은 순차적인 접근을 강조하며 한 작업이 완료되기 전까지 다음 작업을 시작하지 않는다는 것이다. 그게 바로 Sync이다.

 

쉽게 설명하자면, 식당을 생각해보자.

음식을 나르는 서버가 음식을 주문 받고 주문이 완료되어 음식이 나올때까지 기다린 후에 내 옆테이블로 가는 것이다. 알다시피 이 장점은 서버가 음식을 헷갈릴 일이 없다. 단순하기 때문에. 단점은 옆테이블이 기다려야한다는 것이다.

 

동기는 너무나도 이해하기가 쉽다. 끝날때까지 걍 기다림. 끝나는거 보고 다음일 할게~! 가 된다. 숫자 2를 찾는 Task를 하고 있다. 그리고 난 다음 숫자 3을 찾는 Task를 넣었을때, 동기 방식은 숫자 2찾고 나서 다음 차례에 숫자 3을 찾게 된다.

Sync & Async는 동시성으로 판단된다. A하면서 B도 하냐, A하고 나서 B를 하냐 그 차이이다.

 

 

# Blocking ? Non-Blocking? VS. Syn &  Async

공부를 진행하다보니 Blocking과 Non-Blocking이 따라온다. Sync와 Async와 비슷해보일 수도 있지만 조금 다른이야기 이긴하다. 동기, 비동기는 "순서"와 관련이 있다. 하지만, 내가 생각하기에 Blocking과 Non-Blocking은 함수의 제어권에 관한 것이다. 이런 것들을 헷갈린 이유는 종종 JS를 하다보면 JS가 비동기로 동작하기 때문에 Callback을 받아서 동작하게된다. 그 지점에서 우리는 Async와 Non-Blocking을 혼용하면서 사용하곤 한다. 그래서 헷갈린다.(나도 헷갈렸다. JS를 그렇게 깊게 파보지 않아도 함수 몇개만 호출해도 아주 지 맘대로 호출되는 것을 볼 수 있다.)

 

찾아보면서 알게되었는데 Block 개념과 Sync개념이 다른것처럼 Non-Block과 Async도 다른 개념이다. Blocking이 개념이 뭘까? 농구나 배구를 하다보면 Blocking이라는 단어가 나온다.

 

이 단어는 상대방의 공이 나에게 못넘어오게 막는 것이다. 그렇다면 컴퓨팅에서 공을 함수 제어권이라고 생각해보자. 배구에서는 공이 넘어가면 공격권이 나에게 오는 것이다. 컴퓨팅에서도 마찬가지로 함수의 제어권을 갖고 있다는 것은 내가 다른 끝날때까지 나를 호출한 함수를 동작할 수 없게 한다는 것이다.

 

Non-Blocking은 그럼 뭘까? 나를 호출한 함수에게 제어권을 넘기는 것이다. 그렇게 되면 내가 처리를 다 끝냈는지 안끝냈는지 상관없이 나를 호출한 함수에게 제어권을 주는 것이다.

 

앞서 말한 내용을 다시 정리하면 Async와 Non-Blocking, Syn와 Blocking은 같은 내용이 아니다. Syn는 프로세스의 순서에 영향이고 Blocking은 프로세스의 함수 제어권에 따른 분류이다.

 

아래는 그 내용을 아주 잘 표현한 2x2그림이다.

https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

 

 

반응형