꾸준히 안타치기

동기와 비동기 본문

CS

동기와 비동기

글자줍기 2021. 8. 22. 14:51
반응형

동기 (synchronous) - 동시에 일어나는 /   비동기(Aysnchronous) - 동시에 일어나지 않는

동기 - 응답을 받고 나서 송신을 한다.
(
한사람의 말이 다끝나고 말을 시작한다.)
비동기응답여부와 관계없이 다시 전송을 할수 있다.
(
말이 끝났는지 상관없이 말을 한다.)
순차적 병렬적
요청과 동시에 결과가 나타난다.
특정함수를 선언해 결과값을 즉시 return받음.
요청과 동시에 결과가 나타나지 않음. 응답 언제받아도 상관 X
사용자는 요청을 하고 제어권을 다시 가짐.
해야할일을 요청하고, 기다린다.
요구프로세스를 백그라운드에서 처리한다.
노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.
설계가 간단하고 직관적이다. 동기보다 복잡하다.
결과가 올때까지 대기한다.
응답이 오기전까지는 아무것도  하지 못하는 Block상태가 
결과가 올때까지 다른 작업을 할 수 있어 효율적이다.
NonBlock상태
요청과 응답의 순서가 보장 순서가 보장되지 않음

동기는 어떤경우에 사용하나?

분명하게 응답을 받고 진행할경우에 동기를 사용해야한다. 처리결과 값을 보장 받고 처리해야하는 서비스에 적합

설계를 직관적으로 하고 싶을때

응답 여부에 관계없이 빠르게  진행하려 할때는 비동기를 사용한다.

비동기는 어떤경우에 사용하나?

응답 여부에 관계없이 빠르게 진행할때 효율적

1. 서버와의 통신시

서버의 상황에 따라 얼마나 걸릴지 알수 없기 때문에 네트워크 관련작업은 비동기로 처리를 해야한다.

URL세션은 내부적으로 비동기 처리가 되어있다. 네트워크를 기다리는 동안 다른작업을 할수있다.

 

2. 메인스레드에서 UI 비동기 처리시

 

URLSession(비동기 네트워크 사용시유의점)

URL세션은 내부적으로 비동기 처리가 되어있기에

별도의 비동기 처리는 필요하지 않다.

하지만 UI처리는 따로 해주어야한다. 이때 *DispatchQueue.main.async 사용해서 처리해준다.

ex) 응답을 받아온뒤에, 테이블뷰를 Reload 해주는 작업

*DispatchQueue.main.async -코드를 메인스레드에서 실행하도록 요청하는 역할 / 비동기처리 지원

메인스레드(프로그램이 시작할때부터 동작하는 쓰레드) 서브스레드(그외에 나중에 생성된 쓰레드)
UI 관련된 구문은 메인스레드에서 실행해야함 비동기로 처리되는 모든 구문은 여기서 실행

*쓰레드- 하나의 프로세스 내에서 실행되는 작업흐름의 단위. 보통한 프로세스는 하나의 스레드를 가지고 있지만 프로세스 환경에 따라 둘이상의 스레드를 동시에 실행할 수 있따. 이러한 방식을 멀티테스킹이라고 한다. 프로그램이 시작할때 부터 동작하는 스레드를 메인스레드라고하고 그외에 나중에 생성된 스레드를 서브 스레드 또는 세컨더리 스레드라고 한다.

 

URLSession에 사용된 *DispatchQueue.main.async는 UI를 메인스레드에서 비동기처리 되도록 한다.

참고자료 / 야곰부스트코스, 꼼꼼한 재은씨 실전편 

https://wikidocs.net/22372

https://woovictory.github.io/2019/01/03/Android-What-is-retrofit/

반응형
Comments