ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 동기 / 비동기 / 블로킹 / 논블로킹
    OS 2022. 7. 15. 11:59

     

     

    OS 면접준비를 하면서 이번에 동기와 비동기, 블로킹, 논블로킹 파트를 진행하게 되었다. 

    동기와 비동기, 블로킹, 논블로킹에 대해서 동기 = 블로킹, 비동기 = 논블로킹이라고 오해하기 쉽지만 사실은 서로 다른 개념이다.

    다음을 통해 자세히 알아보자. 

     

     

     

     

    동기와 비동기 

    https://medium.com/@vivianyim/synchronous-vs-asynchronous-javascript-de4918e8ad62

     

    동기와 비동기는 작업완료 여부를 신경쓰는가(완료 여부를 확인하는가)에 따라 달라진다. 

    • 동기(Synchronous) 
      • 요청을 보낸 후 return 받아야 다음 동작 실행
      • 현재 작업의 응답이 끝남과 동시에 다음 작업 요청
      • 함수를 호출하는 곳에서 호출되는 함수가 결과를 반환할때까지 대기 
      • 작업 완료 여부를 계속해서 확인 
    • 비동기(Asynchronous)
      • 요청을 보낸 후 return과 상관없이 다음 동작 실행
      • 현재 작업의 응답이 끝나지 않은 상태에서 다음 작업 요청
      • 함수를 호출하는 곳에서 결과를 기다리지 않고 다른 함수(callback)에서 결과 처리 
      • 작업 완료 여부를 확인하지 않음 

     

     

    먼저 동기의 예시를 살펴보자. 

    Scanner sc = new Scanner(System.in); int num = sc.nextInt();

    C 언어의 scanf() 나 Java의 Scanner 객체의 next() 메서드 같이 사용자의 입력을 받는 함수 등, 일반적으로 사용하는 함수들은 대부분 동기적 방식을 사용한다. 

     

    sc.nextIn() 결과 사용자가 입력을 하면(응답값을 받으면) 그 값을 num변수에 담는다. 

     

    동기의 또 다른 예시는 다음과 같다. 

    https://koras02.tistory.com/87#----%EB%-F%--%EA%B-%B-%EB%B-%A-%EC%-B%-D%EC%-D%--%--%EC%--%---A%EA%B-%--%--B%EC%--%--%EA%B-%-C%----%-C---%EC%-B%--%EC%-D%--%--%EC%--%A-%EA%B-%---

    1) A의 계좌는 현재 10,000원을 출금할 예정이다. 

    2) A의 계좌에서 B의 계좌로 방금 인출한 10,000원을 송금한다.

    3) B의 계좌는 10,000원을 받았다는 것을 인지하고나서(응답받고), A의 계좌에 10,000원을 받았다고 전송한다.

    4) A,B 계좌 각각 차감과 증가가 발생한다.

     

    A의 계좌와 B의 계좌는 서로의 요청에 대한 응답을 확인하고나서 같은 일을 동시에 진행하였다. 계좌이체와 같은 작업은 동기 방식으로 처리해야 A에서 보낸 돈을 B가 못받는 상황이 없을 것이다. 

    이와 같이 동기에서는 추구하는 행위 및 목적(A 계좌에서 10000원 B에게 이체 )이 동시에 이루어지는 것을 확인할 수 있다. 

     

     

     

    다음으로 비동기의 예시를 살펴보자. 

    비동기의 첫번째 예시는 제이쿼리의 ajax이다. 

    function getData() {
    	var tableData;
    	$.get('http://localhost:8080/products/1', function(response) {
    		tableData = response;
    	});
    	return tableData;
    }
    
    console.log(getData());
    
    //undefined

    코드를 설명하면, 클라이언트에서 $.get() 요청을 통해 ajax 네트워크 통신으로 데이터를 가져와 받아온 데이터는 response에 담고 tableData = response를 통해 데이터를 변수에 저장하고 출력하였을때의 결과값이 undefined이다. 

     

    결과값이 undefined인 이유는 $.get()요청을 통해 데이터를 받아올 때까지 기다리지 않고 함수내부에서 return tableData; 부분을 실행하여 초기화 되지 않은 tableData의 값을 출력했기 때문이다. 

     

    이와 같이 로직의 실행이 끝날 때까지 기다리지 않고 나머지 코드를 진행하는 것이 바로 비동기 처리이다.

     

    다음의 예시를 더 보자. 

    비동기의 두번째 예시는 js의 setTimeout()함수이다.

    setTimeout(foo, 3000);
    
    function foo(){
       console.log("2");
    }
    console.log("1");
    
    // 1 2

    setTimeout()은 Web API의 한 종류로 로직을 지정시간만큼 기다렸다가 실행하도록 한다.

    코드를 설명하자면, setTimeout()함수를 호출하면 3초 뒤에 foo() 함수가 수행되며 위의 코드를 실행했을 때의 결과값이 1, 2 순이다. 

     

    이 이유는 setTimeout()을 통해 기다리는 3초동안 다음 로직인 console.log("1")을 실행하고 나서 foo() 함수가 실행되기 때문이다. 

     

    여기서의 foo()함수는 setTimeout()함수의 콜백함수(callback)이며 이는 비동기 방식에서 어떤 수행이 완료되었을 때 수행되어야 할 함수를 지정해 주는 것이다. 만약 콜백함수를 지정하지 않고 결과값을 다른 변수에 담아 사용하려고 하면, 비동기식으로 진행되어 기다리지 않아 결과값을 받지 못했기 때문에 원하지 않은 결과값이 발생할 확률이 있다. 

     

    콜백함수의 동작 방식은 식당 대기줄에 비유할 수 있는데, 대기자 명단에 이름을 써두고 자리가 날때까지 다른 일을 하다가 자리가 났다고 연락이 오면(응답완료) 돌아가서 밥을 먹는 것(콜백함수 실행)과 같다. 

     

    하지만 이러한 콜백함수를 중첩에서 사용하게 되는 경우 다음과 같은 콜백지옥(callback hell)에 빠지게 된다. 

    $.get('url', function(response) {
    	parseValue(response, function(id) {
    		auth(id, function(result) {
    			display(result, function(text) {
    				console.log(text);
    			});
    		});
    	});
    });

    이러한 구조는 가독성이 떨어지고 로직을 변경하기도 어렵기 때문에 사용을 지양하고 대신 Promise, Async를 사용하거나 각 콜백 함수를 분리하는 패턴을 사용하도록 한다. 

     

    비동기의 또다른 예시는 다음과 같다.

    https://koras02.tistory.com/87#----%EB%-F%--%EA%B-%B-%EB%B-%A-%EC%-B%-D%EC%-D%--%--%EC%--%---A%EA%B-%--%--B%EC%--%--%EA%B-%-C%----%-C---%EC%-B%--%EC%-D%--%--%EC%--%A-%EA%B-%---

    1) 학생은 받은 시험지를 푼다.

    2) 시험문제를 모두 푼 학생은 선생에게 자신이 푼 시험지를 건낸다.

    3) 선생은 학생으로 부터 받은 시험지를 채점한다.

    4) 채점이 다 된 시험지를 학생에게 전송한다.

    5) 학생은 선생이 전송한 시험지를 받아 자신의 시험 결과를 확인한다.

    여기서 학생(시험지를 품)과 선생(시험지를 채점)은 공통 대상인 시험지에 행하는 행위의 목적이 다르기 때문에 둘의 작업 처리기간은 일치 하지 않고, 일치하지 않아도 된다. 

    이와 같이 비동기는 추구하는 행위 및 목적이 다를 수 있고 동시에 이루어지지도 않음을 확인할 수 있다. 

     

     

     

    동기와 비동기의 장단점을 비교하면 다음과 같다 

      동기 비동기 
    장점 - 구성이 단순
    - 직관적 
    - 순서가 보장되는 실행이 가능
    - 동시에 여러일을 수행할 수 있음 
    - 요청의 결과가 반환되는 시간 동안 다른 작업 수행 가능
    - 자원의 효율적 사용 가능  
    당점 - 여러일을 동시에 수행하는 멀티태스킹이 불가
    - 결과가 주어질 때 까지 대기 
    - 일정 시간당 요청량이 많은 경우 부하가 발생할 수 있음
    - 동기식보다 설계가 복잡

    따라서 비동기적으로 처리해야할 작업들은 다음과 같다 

    • 파일을 읽거나, 쓰기 처럼 오래걸리는 작업
    • ajax 통신작업
    • Dom의 이벤트 처리작업
    • 일정 시간 뒤에 동작을 해야 하는 작업

     

     

    💡 동기와 비동기

    • 나는 네이버 메인에 접속하였다.  -> 동기 
    • 아이디를 잃어버려서 아이디 찾기 페이지로 이동하였다.  -> 동기 
    • 정보를 입력하고 핸드폰인증하기 버튼을 눌렀다.  -> 비동기 
    • 아이디를 찾고 로그인에 성공하여 실시간으로 변경되는 급상승 검색어를 확인하였다. -> 비동기 
    • 급상승 검색어를 클릭하여 페이지로 이동하였다. -> 동기 

     

     

     

     

    블로킹과 논블로킹 

    https://minkwon4.tistory.com/301

    블로킹과 넌블로킹은 제어권이 넘어오는가(함수의 리턴시기 및 제어권)에 따라 달라진다.

    • 블로킹(Blocking) 
      • 호출된 함수가 자신의 작업을 모두 끝낼 때까지 제어권을 가지고 있어 호출한 함수가 대기 
      • 제어권이 호출된 함수로 넘어감
      • 제어권을 가지게 된 호출된 함수가 작업을 모두 끝낸 후에서야 응답 값과 제어권을 원래 함수로 return 
      • 기존 함수는 제어권이 없는 상태라 작업 불가  
    • 논블로킹(NonBlocking)
      • 호출 된 함수가 바로 return 하여 제어권을 돌려주어 호출한 함후에게 다른 작업 수행이 가능하도록 
      • 함수가 호출되어도 호출한 함수는 제어권을 넘겨주었다가 바로 돌려받음 
      • 기존 함수가 제어권을 가지고 있어 다른 작업 가능 

     

    https://ju3un.github.io/network-basic-1/

    blocking I/O Model에서는 I/O 작업(User Level(Application)에서 직접 수행할 수 없기 때문에  I/O 작업은 Kernel Level(OS)모드에서 실행)시 사용자 프로그램을 block하는 것을 말한다. 

    1) User 모드에 있던 프로그램이 I/O 작업을 처리하기 위해 시스템 콜을 통해 커널모드로 변경을 요청

    2) Context Switching이 발생

    3) 커널에서 해당 I/O 을 완료하고 데이터를 반환

    4) 다시 사용자 모드로 돌아가며 프로그램의 스레드에 걸렸던 block이 해제

    이는 커널이 작업을 완료할 때까지 대기하므로 자원 낭비가 심하다.

     

     

    이와 반대로 Non-Blocking I/O Model에서는 I/O 작업을 진행하는 동안 유저 프로세스의 작업을 중단시키지 않는다.

    1) 유저 프로세스가 I/O 작업을 처리하기 위해 시스템 콜 

    2) 커널에서 함수의 진행 상황과 관계없이 바로 결과를 반환 (처음에는 완료하지 않았다는 결과)

    3) 응답 값이 있을 때까지 1-2 반복 

    4) 결과 값이 나오면 사용자에게 결과 전달 

    이 경우에는 I/O의 진행시간과 관계없이 대기하지 않고 프로그램에서 작업을 왠시간 중지하지 않고 I/O작업을 완료할 수 있지만, 반복적인 시스템 호출 밎 응답값 확인(polling)이 이루어져야 하기 때문에 수많은 클라이언트 요청이 동시다발적으로 일어날 경우 CPU에 적지 않은 부담이 되며 자원이 낭비될 수 있다. 

     

     

    위에서 보았던 학생-선생님 시험지로 예시를 들어보자.

    Block -> 학생이 시험지를 선생에게 건네고 가만히 앉아 채점이 끝날 떄 까지 시험지 돌려받기를 기다림 

    Non-Block -> 학생이 시험지를 건넨 후 채점이 완료 될때까지 다른 과목을 공부한다거나 게임을 하거나 다른 일을 수행 

     

     

     

     

     

     

     

    동기 / 비동기 / 블로킹 / 논블로킹 

    이제 동기와 비동기, 블로킹, 논블로킹을 예를 들어 비교해보자. 

     

    ① Blocking & Synchronous (블로킹 & 동기)

    나 : 대표님, 개발자 좀 더 뽑아주세요..
    대표님 : 오케이, 잠깐만 거기 계세요!
    나 : …?!!
    대표님 : (채용 공고 등록.. 지원자 연락.. 면접 진행.. 연봉 협상..)
    나 : (과정 지켜봄.. 궁금함.. 어차피 내 일 하러는 못 가고 계속 서 있음)

    위와 같이 행위 및 목적(개발자 채용)이 일치하며 과정이 동시에 일어나고 있고 제어권이 넘어오지 않아 기다리고 있는 모습을 확인할 수 있다. 

     

    또 다른 예시는 다음과 같다. 

    우체국에 들어오는 물품들을 싣기 위해서 우체국에 배달 트럭들이 줄을 서 있다.
    1) 트럭이 우체국에 내 것들을 가져와주세요 요청하고 기다린다. (블럭)
    2) 우체국은 1번 트럭에게 주기 위한 물건들을 찾아서 싣기 시작한다. 
    3) 2번트럭은 1번트럭에 물건이 다 싣기를 기다린다. (블럭)
    4) 3번 트럭도 기다린다. (블럭)
    5) 1번트럭이 물건을 싣고 떠나면, 우체국은 이제 2번 트럭의 물건을 찾아서 싣는다. (동기) 
    
    모든 일들이 순차적으로 일어 난다 (동기)

     

     

     

    ② Blocking & Asynchronous (블로킹 & 비동기) 현업에서는 일부러 사용되지 않음

    나 : 대표님, 개발자 좀 더 뽑아주세요..
    대표님 : 오케이, 잠깐만 거기 계세요!
    나 : …?!!
    대표님 : (채용 공고 등록.. 지원자 연락.. 면접 진행.. 연봉 협상..)
    나 : (안 궁금함.. 지나가는 말로 여쭈었는데 붙잡혀버림.. 딴 생각.. 못 가고 계속 서 있음)

    행위 및 목적(개발자 채용, 다른 생각)이 일치하지 않지만 제어권이 넘어오지 않아 기다리고 있는 모습을 확인할 수 있다.

     

    또 다른 예시는 다음과 같다.

    우체국에 가서 내가 필요한 물품은 무엇이라고 접수원에게 말을 하고 집으로 돌아온다.
    1) 우체국은 물품을 준비하고, 나는 집에서 집안 청소를 한다. (비동기)
    2) 우체국에 전화 해서 접수원과 통화한다. 물품이 준비되었냐고 물어본다. 접수원은 준비될 때 까지 기다리라고 한다. 나는 하염없이 기다린다 (블럭)
    3) 접수원이 준비됬다고 말한다. 나는 트럭을 가지고 우체국으로 가서 물건을 싣고 온다.
    4) 우체국은 자신의 일을 하고, 나는 싣고 온 물건을 배달한다 (비동기) 
    
    중간에 블럭되는 지점이 있지만, 그 이전과 이후에는 각자 자신의 일을 한다.

    Blocking-Async는 별로 이점이 없어서 일부러 이 방식을 사용할 필요가 없긴 하지만, 의도하지 않게 Blocking-Async로 동작하는 경우가 있다고 한다. 

    먼저 첫번째로 Blocking-Async의 대표적인 케이스가 Node.js와 MySQL의 조합이다. Node.js 쪽에서 callback 지옥을 헤치면서 Async로 전진해와도, 결국 DB 작업 호출 시에는 MySQL에서 제공하는 드라이버를 호출하게 되는데, 이 드라이버가 Blocking 방식이기 때문에 Blocking- Async가 된다. Node.js 뿐아니라 Java의 JDBC도 마찬가지다. 다만 Node.js가 싱글 쓰레드 루프 기반이라 멀티 쓰레드 기반인 Java의 Servlet 컨테이너보다 문제가 더 두드러져 보일 뿐, Blocking-Async라는 근본 원인은 같다.

     

    Blocking-Async는 별다른 장점이 없어서 일부러 사용할 필요는 없지만, NonBlocking-Async 방식을 쓰는데 그 과정 중에 하나라도 Blocking으로 동작하는 놈이 포함되어 있다면 의도하지 않게 Blocking-Async로 동작할 수 있다.

     

    두번째는 직관적인 코드의 흐름을 유지하면서 작업을 병렬적으로 처리하기 위해서이다. 동기 & 블로킹 I/O의 경우 직관적이지만 여러개의 I/O를 동시에 처리할 수 없고 논블로킹 I/O는 프로세스들의 작업을 컨트롤 하는 것이 까다롭다(까다로워서 C언어로 구성). 그렇지만 동기 & 블로킹 I/O와 멀티 프로세싱이나 쓰레딩을 결합해서 쓰는 것은 자원 문제 및 프로세스/스레드 간 통신이나 동기화가 어려워지는 점이 있다. 

    따라서 직관적인 코드의 흐름을 유지하면서 작업을 병렬적으로 처리하기 위해 Linux/UnixS OS의 I/O 다중화 모델 등에서 사용된다.

     

     

     

    ③ Non-blocking & Synchronous (논블로킹 & 동기)

    나 : 대표님, 개발자 좀 더 뽑아주세요..
    대표님 : 알겠습니다. 가서 볼 일 보세요.
    나 : 넵!
    대표님 : (채용 공고 등록.. 지원자 연락.. 면접 진행.. 연봉 협상..)
    나 : 채용하셨나요?
    대표님 : 아직요.
    나 : 채용하셨나요?
    대표님 : 아직요.
    나 : 채용하셨나요?
    대표님 : 아직요~!!!!!!

    행위 및 목적(개발자 채용)이 일치하지만 제어권이 넘어가 있어 다른 일을 수행할 수 있다. 하지만 응답값을 계속해서 기다리며 물어보는 것을 확인할 수 있다. 

     

    또 다른 예시는 다음과 같다.

    우체국에 가서 내가 필요한 물품은 무엇이라고 접수원에게 말을 하고 집으로 돌아온다.
    1) 우체국은 물품을 준비하고, 나는 전화기를 붙잡는다.
    2) 우체국에 전화 해서 접수원과 통화한다. 물품이 준비되었냐고 물어본다. 접수원은 안됬다고 말한다. 나는 전화를 바로 끊는다. (논블럭)  
    3) 전화를 끊고, 집안 청소를 하는게 아니라, 다시 우체국에 전화한다. 안됬다고 하면 바로 끊는다 (논블럭)
    4) 계속 반복적으로 전화한다 (논블럭이며, 나는 내 일을 하는게 아니라 우체국의 일에 매달리고 있으므로 동기) 
    5) 이번 전화에는 접수원이 준비됬다고 말한다. 나는 트럭을 가지고 우체국으로 가서 물건을 싣고 온다.
    6) 나는 싣고 온 물건을 배달한다.
    
    중간 중간 논블럭으로 전화를 바로 끊지만, 끊고 나서 바로 또 전화를 하므로 동기
    * 이 경우에 내가 배달하는 동안에는 현실과 좀 다르지만 우체국은 쉰다고 생각 해야한다.  (동기)

     

     

     

    ④ Non-blocking & Asynchronous (논블로킹 & 비동기)

    나 : 대표님, 개발자 좀 더 뽑아주세요..
    대표님 : 알겠습니다. 가서 볼 일 보세요.
    나 : 넵!
    대표님 : (채용 공고 등록.. 지원자 연락.. 면접 진행.. 연봉 협상..)
    나 : (열일중..)
    대표님 : 한 분 모시기로 했습니다~!
    나 : 😍

    행위 및 목적(개발자 채용, 다른 일)이 일치하지 않고 제어권이 넘어가 있어 다른 일을 수행할 수 있으며 행위가 완료되었을 때 응답을 받는 것을 확인할 수 있다. 

     

    또 다른 예시는 다음과 같다.

    우체국에 가서 내가 필요한 물품은 무엇이라고 접수원에게 말을 하고 트럭을 놓고 집에 온다. (논블럭)
    트럭(버퍼) 크기가 크다면 우체국에서 많이 채워 줄 것이다. (하지만 좀 더 시간이 걸리겠지) 
    1) 우체국은 물품을 준비하고, 나는 집에 와서 내일 을 한다 (비동기)
    2) 전화 따위는 하지 않는다. 우체국에서 알아서 트럭에 짐을 채워서 나에게 트럭이 준비됬으면 연락 할 것이기 때문이다. 
    3) 트럭이 가득 찼다고 연락이 왔다. 나는 트럭을 가지고서 배달을 시작하고 우체국은 자신의 일을 한다.

    효율적이지만 여기서 만약 트럭이 한대 뿐이라면, 배달하는 동안에는 우체국에서 또 다른 짐을 싣지 못한다. 

    트럭을 2개 만들어(기술적으로 버퍼를 2개) 둔다면 좀더 효율적으로 일이 가능할 것이다. 

     

    또 여기서는 배달 기사가 한명이지만, 배달 기사를 늘리게 되면 배달 중 우체국에서 또 다른 트럭이 가득 찼다고 전화가 오면 다른 기사가 갈 수 있으므로 더 빠르게 많은 양을 처리할 수 있게 된다. 예를 들어 한대의 트럭이 준비되면 그 트럭이 짐을 3등분해서 배달기사 3명에게 나눠준다. 또 다른 트럭이 준비되면 , 배달알바가 끝난 알바생에게 나눠주거나 또 다른 알바생에게 나눠준다. 즉 일의 크기에 따라 배달 기사를 늘리는 것인데 여기서의 배달 기사가 바로 멀티 쓰레드가 된다. 

     

    비동기 / 싱글쓰레드로 짧게 일하는 곳 (Node 비동기 서버에서 간단한 리턴만 서비스 하는 곳)에서는 멀티 쓰레드를 굳이 도입하지 않아도 효율적이지만, 백엔드에서 해야 할 일이 많다면 (CPU intensive) 멀티스레드를 이용해 성능을 높일 수 있다. 

     

     

     

     

    https://hamait.tistory.com/930

     

    블럭,논블럭,동기,비동기 이야기

    블럭,논블럭,동기,비동기 이야기  블록,논블럭,동기,비동기를 구분하는 것에 대한 글들이 있는데, 별거 아닌거 가지고 어렵게 풀어내는 거 같아서 나름 간단하고 분명하게 구분해 보는 글을

    hamait.tistory.com

    https://velog.io/@slobber/%EB%8F%99%EA%B8%B0%EC%99%80-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%9D%98-%EC%B0%A8%EC%9D%B4

     

    동기와 비동기의 차이

    오늘은 개발을 하다보면 자주 등장하는 동기와 비동기 개념에 대해 알아보겠습니다.

    velog.io

    https://sudo-minz.tistory.com/21

     

    비동기 통신과 AJAX (동기 비동기의 개념, 차이,장단점, 예시, 콜백함수, 콜백지옥)

    비동기 통신과 AJAX (동기 비동기의 개념, 차이,장단점, 예시, 콜백함수, 콜백지옥) 데이터를 받는 방식인 동기와 비동기 그리고 AJAX. 각각이 무엇이며, 어떤 특징이 있는지 예시를 통해 알아본다.

    sudo-minz.tistory.com

    https://ju3un.github.io/network-basic-1/

     

    블로킹(Blocking), 논블로킹(Non-Blocking) - I/O 모델 (1)

    당분간 네트워크 관련 개념에 관한 포스팅으로 정리를 하려고 한다. 일단 네트워크 프로그래밍에서 가장 기본적인 개념에 대해 정리할 예정이다. 이번 포스팅에서는 Blocking/Non-Blocking Model에 대

    ju3un.github.io

    https://musma.github.io/2019/04/17/blocking-and-synchronous.html

     

    동기와 비동기, 그리고 블럭과 넌블럭

    무릇 모든 개발자들, 아니 비단 개발자가 아니라 할지라도 컴퓨터 관련 산업계 종사자들이라면 오다 가다 한 번씩은 꼭 들어보고, 또 익혔음직한 내용이겠습니다. 이름하야, 동기(Synchronous)와 비

    musma.github.io

    https://koras02.tistory.com/87#----%EB%-F%--%EA%B-%B-%EB%B-%A-%EC%-B%-D%EC%-D%--%--%EC%--%---A%EA%B-%--%--B%EC%--%--%EA%B-%-C%----%-C---%EC%-B%--%EC%-D%--%--%EC%--%A-%EA%B-%---

    https://cotak.tistory.com/136

     

    [운영체제] 동기와 비동기, 블로킹과 논블로킹

    동기(Synchronous)와 비동기(Asynchronous) 동기/비동기는 주로 어플리케이션에서 자주 다뤄지는 개념이며, 다음 작업이 요청되는 시간과 관련되어 있다. 동기(Synchronous) 현재 작업의 응답이 끝남과 동

    cotak.tistory.com

    https://ju3un.github.io/network-basic-1/

     

    블로킹(Blocking), 논블로킹(Non-Blocking) - I/O 모델 (1)

    당분간 네트워크 관련 개념에 관한 포스팅으로 정리를 하려고 한다. 일단 네트워크 프로그래밍에서 가장 기본적인 개념에 대해 정리할 예정이다. 이번 포스팅에서는 Blocking/Non-Blocking Model에 대

    ju3un.github.io

    https://coooding.tistory.com/53

     

    동기(Synchronous)와 비동기(Asynchronous) / 블로킹(Blocking)과 논블로킹(non-blocking)

    동기(Synchronous)와 비동기(Asynchronous) / 블로킹(Blocking)과 논블로킹(non-blocking) 여러 책이나 영상을 통해 공부를 하다 동기와 비동기, 블로킹과 논블로킹이라는 단어를 많이 들어보았으나 그 둘의

    coooding.tistory.com

    https://musma.github.io/2019/04/17/blocking-and-synchronous.html

     

    동기와 비동기, 그리고 블럭과 넌블럭

    무릇 모든 개발자들, 아니 비단 개발자가 아니라 할지라도 컴퓨터 관련 산업계 종사자들이라면 오다 가다 한 번씩은 꼭 들어보고, 또 익혔음직한 내용이겠습니다. 이름하야, 동기(Synchronous)와 비

    musma.github.io

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

     

    Blocking-NonBlocking-Synchronous-Asynchronous

    꽤 자주 접하는 용어다. 특히나 요즘들어 더 자주 접하게 되는데, 얼추 알고는 있고 알고 있는게 틀린 것도 아니지만, 막상 명확하게 구분해서 설명하라면 또 만만치가 않은.. 그래서 찾아보면

    homoefficio.github.io

    https://velog.io/@tess/Sync-Async-vs-Blocking-non-Blocking

     

    Sync, Async vs Blocking, non-Blocking

    해당 블로깅은 \[10분 테코톡\] 🎧 우의 Block vs Non-Block & Sync vs Async

    velog.io

    https://minkwon4.tistory.com/301

     

    [CS] 동기와 비동기 그리고 블로킹과 논블로킹

    프로그래밍을 하거나 컴퓨터 과학을 학습할 때, 동기와 비동기 그리고 블로킹과 논블로킹이란 단어들을 쉽게 접할 수 있다. 다만 '동기==블로킹', '비동기==논블로킹'이란 개념을 쉽게 가질 수 있

    minkwon4.tistory.com

     

Designed by Tistory.