본문 바로가기
전공 수업/컴퓨터 통신(Computer Communication)

[9주 차] - 디버깅(Debugging), 소켓의 Blocking, Non-Blocking & Synchronous, Asynchronous

by TwoJun 2022. 10. 24.

    과목명 : 컴퓨터 통신(Computer communication)

수업일자 : 2022년 10월 24일 (월)

 

 

※ 시작 전 아래 내용 숙지  

(1) 제어권 : 자신(함수)의 코드를 실행할 권리이며, 제어권을 보유한 함수는 자신이 할 일을 모두 수행한 후 자신을 호출한 함수에게 제어권을 돌려준다.

 

(2) 결과값을 기다린다 : 함수 A에서 함수 B를 호출했을 때, 함수 A가 함수 B의 결과값(Return value)을 기다리는지에 대한 여부

 

 

1. Blocking, Non-Blocking?

1-1. Blocking 

- Blocking의 넓은 의미로는 "막혀있는",  "차단되어 있는" 뜻을 가지며, 특정 행위자가 취한 행위 자체가 또는 그 행위로 인해 다른 무엇이 막혀버린, 제한된 상태로 대기하는 상태를 의미합니다.

 

- 컴퓨터 과학(Computer Science) 측면에서 보면 이렇습니다.

 

(1) 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 종료될 때까지 대기한 후 자신의 작업을 다시 시작하는 것을 의미

 

(2) 즉 제어권을 누가 가지고 있는지에 대해 초점이 맞춰져 있습니다.

 

 

 

 

(3) Blocking 동작

Blocking의 동작 방식

- 함수 A가 실행 중에 함수 B를 호출하고 제어권을 B에게 넘깁니다.

- 함수 B가 실행되고 있으며 제어권이 B에게 넘어감에 따라 함수 A는 B가 종료될 때까지 수행하던 작업을 멈춥니다.

- B의 실행이 종료되고 제어권이 다시 A로 넘어가며 함수 A가 재실행됩니다.

 

 

 

 

 

 

1-2. Non-Blocking

- 다른 주체의 작업 여부와 관계없이 자신의 작업을 수행하는 것을 의미합니다.

 

 

(1) Non-Blocking 동작

Non-Blocking의 동작 방식

- 함수 A가 실행 중에 함수 B를 호출합니다.

- B를 호출하더라도 제어권은 함수 A가 가지고 있고, 함수 B가 실행됩니다.

- 함수 B가 실행되어도 A는 지속적으로 본인의 작업을 수행하고 있습니다.

- 함수 B의 실행이 완료됩니다.

 

 

 

 

 

2. Synchronous & Asynchronous?

- 처리해야 할 작업들을 어떠한 "흐름"으로 처리할 것인가에 대한 부분입니다.

- 즉, 호출되는 함수의 작업 완료 여부를 신경쓰는지에 따라, 함수의 실행/Return 순차적인 흐름을 따르는지 초점이 맞춰집니다.

 

 

2-1. 동기(Synchronous)

- 호출하는 함수 A가 호출되는 함수 B의 작업 완료 후 리턴을 기다리거나, 리턴을 받아도 작업 미완료 상태라면 작업 완료 여부를 계속 확인하는 상태입니다.

 

- 간단히 말하면 함수 A가 함수 B를 호출한 뒤 함수 B의 리턴값을 계속 확인하면서 함수 B의 작업이 완료될 때까지 B를 계속 관리합니다.

 

- 요청과 결과가 동시에 일어나긴 하지만 요청 처리 속도에 따라 결과값을 뒤늦게 받을 수도 있게 됩니다.

 

- 결과를 받는 응답이 완료될 때까지 프로세스는 멈춰있으며 응답을 받은 후 프로세스가 재실행됩니다.

 

- 따라서 시스템 효율이 떨어질 수 있습니다.

 

 

(1) Synchronous 동작

Synchronous(동기) 방식의 동작

 

 

 

 

 

2-2. 비동기(Asynchronous) 

- 함수 A가 함수 B를 호출할 때 콜백 함수를 함께 전달해서 함수 B의 작업이 완료되면 함께 콜백 함수를 실행합니다.

 

- 함수 A는 함수 B를 호출한 후 함수 B의 작업 완료 여부에는 관여하지 않습니다.

 

- 요청한 결과에 대해 바로 응답을 받을 수도 있고 받지 못할 수도 있습니다.

 

- 결과값이라는 응답을 받지 못해도 프로세스는 수행하던 작업을 계속 진행합니다. 

 

- 이에 따라 비동기식 프로그래밍은 동기식 프로그래밍보다 속도 측면에서 빠르며 비동기식은 특정 요청을 한 후 다른 작업을 처리하고 있다가 호출한 함수의 작업이 모두 완료되어 결과(응답)를 받으면 해당 응답을 다시 처리합니다.

 

- 위에서 함수 B를 호출할 때 같이 넘긴 콜백 함수(Callback function)는  호출한 함수의 처리 결과를 알려달라는 함수이고, 함수 B는 처리가 완료되면 콜백 함수를 호출하여 작업 완료 여부를 알립니다.

 

 

 

(1) Asynchronous 동작

Asynchronous(비동기) 방식의 동작

 

 

 

 

 

3. TCP Server / Client 모델에서의 Blocking, Non-Blocking 

(1) Blocking

TCP Server/Client 모델에서의 Blocking 상태

 

 

 

(2) Non-Blocking

TCP Server/Client 모델에서의 Non-Blocking 상태

 

 

 

 

 

4. 디버깅(Debugging)

4-1. 디버깅의 정의

- 디버깅(Debugging) 또는 디버그(Debug)는 프로그램 개발 단계 중에 발생하는 프로그램의 논리적인 오류, 비정상적 연산을 찾아내거나 또는 그 원인을 밝히고  수정하는 작업 과정을 의미하며 주로 프로그램의 개발 단계의 마지막에서 이루어집니다.

 

- 프로그램의 오류엔 문법(Syntax)을 올바르게 지키지 않아 발생하는 컴파일 타임 에러, 코드의 자체적인 문제로 인해 메모리가 죽는 문제로 발생하는 오류 등 다양한 문제가 존재합니다.

 

 

 

4-2. 프로그램의 논리적인 오류

- 컴파일 문제도 없고, 프로그램이 정상적으로 동작하는 것 같지만 원하는 연산을 수행하였을 때 그 값이 잘못된 형식으로 나오는 상황(의도하지 않은 값이 출력됨)을 의미합니다.

 

 

 

 

 

 

 

 

- 학부에서 수강했던 전공 수업 내용을 정리하는 포스팅입니다.

- 내용 중에서 오타 또는 잘못된 내용이 있을 시 지적해 주시기 바랍니다.

 

댓글