Blocking & NonBlocking
Blocking & NonBlocking은 호출되는 함수(시스템)가 바로 리턴하느냐 마느냐가 중점입니다.
호출된 함수(시스템)가 바로 리턴하여 호출한 함수(프로그램)에게 제어권을 넘겨주고 호출한 함수(프로그램)가 다른일을 할수 있는 기회를 줄수 있으면 NonBlocking입니다.
그렇지 않고 호출된 함수가 자신의 작업이 모두 마칠때까지 호출한 함수에게 제어권을 넘겨 주지 않고 대기하게 만든다면 Blocking입니다.
- 예시
A라는 함수와 B라는 함수가 존재할때 A라는 함수에서 B라는 함수를 호출했다고 가정해봅니다.
이때 호출된 함수는 B이고 호출한 함수는 A입니다. B라는 함수가 호출되면서 B라는 함수가 실행되고 있습니다.(제어권이 B에게 주어진 상황입니다.)
이때 제어권을 바로 넘겨주느냐 아니면 호출된 함수의 작업이 끝날때까지 제어권을 넘겨주지 않느냐의 차이입니다.
- Blocking → 함수 B가 실행되고 작업이 끝날때까지 함수 A에게 제어권을 넘겨주지 않습니다.(함수 B가 제어권을 가지고 있음)
- NonBlocking → 현재 B가 실행되고 작업이 끝나지 않았음에도 A에게 제어권을 넘겨줌 (A는 B의 작업을 기다리면서 다른일을 진행할수 있음)
B라는 함수는 그냥 B대로 따로 쓰레드든지 단일 스레드를 분할해서 다른 제어권을 별도로 갔던지 해서 호출자에게 제어권을 넘겨준후 작업하게 됩니다.
Synchronous(Sync) & Asynchronous(Async)
일단 Sync는 개념은 현재 작업의 처리가 끝나는 시간에 맞춰 다음 작업을 요청, 즉 끝나는 시간과 다음 작업을 요청하는 시간을 맞춘다는 개념입니다.
Async는 반대로 시간을 맞추지 않는다라고 해석할수 있습니다.
Sync(동기) & Async(비동기)는 위에서 나온 Blocking, Nonblocking 과 비슷하지만 관심사가 다릅니다.
Sync와 Async는 호출되는 함수의 작업 완료 여부를 확인하느냐 아니냐가 관심사입니다.
그렇다면 위에서 작업 완료 여부를 확인하느냐 아니냐는 시간을 맞추기 위하여 작업 완료 여부를 계속해서 확인 하느냐 아니냐로 관심사를 확인할수 있습니다.
Sync & Blocking
application에서 Data call(시스템 호출)을 실행한후 제어권을 넘기게 되고(Blocking) 그리고 결과값이 준비가 완료 됬다면 요청이 완료됬는지 확인(Sync)한후 결과값과 제어권을 넘겨 받게 됩니다
ASync & Blocking
Data call(시스템 호출)후 Application은 System에 결과값에 신경쓰지 않고 Callback함수를 보내게 됩니다.(Async)
결과값에 신경쓰지 않더라도 제어권을 System에게 넘겨 결과값이 반환될때 까지 Blocking 상태로 대기합니다.(Blocking)
Sync & Nonblocking
Data call(시스템 호출)을 실행한후 Application은 System으로 부터 작업이 됬든 안됬든 제어권을 넘겨받고 다른일을 수행합니다.(Nonblocking)
System의 결과값을 얻기 위하여 중간중간에 준비가 됬는지 확인합니다.(Sync)
Async & Nonblocking
Data call(시스템 호출)후 제어권을 바로 넘겨준후 다른일을 수행합니다.(Nonblocking) 그리고 Application은 System의 결과값을 신경쓰지 않고 Callback함수를 보내게 됩니다.(Async)
이후 System에서 준비가 완료되면 응답하게 됩니다.
Blocking & NonBlocking
Blocking & NonBlocking은 호출되는 함수(시스템)가 바로 리턴하느냐 마느냐가 중점입니다.
호출된 함수(시스템)가 바로 리턴하여 호출한 함수(프로그램)에게 제어권을 넘겨주고 호출한 함수(프로그램)가 다른일을 할수 있는 기회를 줄수 있으면 NonBlocking입니다.
그렇지 않고 호출된 함수가 자신의 작업이 모두 마칠때까지 호출한 함수에게 제어권을 넘겨 주지 않고 대기하게 만든다면 Blocking입니다.
- 예시
A라는 함수와 B라는 함수가 존재할때 A라는 함수에서 B라는 함수를 호출했다고 가정해봅니다.
이때 호출된 함수는 B이고 호출한 함수는 A입니다. B라는 함수가 호출되면서 B라는 함수가 실행되고 있습니다.(제어권이 B에게 주어진 상황입니다.)
이때 제어권을 바로 넘겨주느냐 아니면 호출된 함수의 작업이 끝날때까지 제어권을 넘겨주지 않느냐의 차이입니다.
- Blocking → 함수 B가 실행되고 작업이 끝날때까지 함수 A에게 제어권을 넘겨주지 않습니다.(함수 B가 제어권을 가지고 있음)
- NonBlocking → 현재 B가 실행되고 작업이 끝나지 않았음에도 A에게 제어권을 넘겨줌 (A는 B의 작업을 기다리면서 다른일을 진행할수 있음)
B라는 함수는 그냥 B대로 따로 쓰레드든지 단일 스레드를 분할해서 다른 제어권을 별도로 갔던지 해서 호출자에게 제어권을 넘겨준후 작업하게 됩니다.
Synchronous(Sync) & Asynchronous(Async)
일단 Sync는 개념은 현재 작업의 처리가 끝나는 시간에 맞춰 다음 작업을 요청, 즉 끝나는 시간과 다음 작업을 요청하는 시간을 맞춘다는 개념입니다.
Async는 반대로 시간을 맞추지 않는다라고 해석할수 있습니다.
Sync(동기) & Async(비동기)는 위에서 나온 Blocking, Nonblocking 과 비슷하지만 관심사가 다릅니다.
Sync와 Async는 호출되는 함수의 작업 완료 여부를 확인하느냐 아니냐가 관심사입니다.
그렇다면 위에서 작업 완료 여부를 확인하느냐 아니냐는 시간을 맞추기 위하여 작업 완료 여부를 계속해서 확인 하느냐 아니냐로 관심사를 확인할수 있습니다.
application에서 Data call(시스템 호출)을 실행한후 제어권을 넘기게 되고(Blocking) 그리고 결과값이 준비가 완료 됬다면 요청이 완료됬는지 확인(Sync)한후 결과값과 제어권을 넘겨 받게 됩니다
Data call(시스템 호출)후 Application은 System에 결과값에 신경쓰지 않고 Callback함수를 보내게 됩니다.(Async)
결과값에 신경쓰지 않더라도 제어권을 System에게 넘겨 결과값이 반환될때 까지 Blocking 상태로 대기합니다.(Blocking)
Data call(시스템 호출)을 실행한후 Application은 System으로 부터 작업이 됬든 안됬든 제어권을 넘겨받고 다른일을 수행합니다.(Nonblocking)
System의 결과값을 얻기 위하여 중간중간에 준비가 됬는지 확인합니다.(Sync)
Data call(시스템 호출)후 제어권을 바로 넘겨준후 다른일을 수행합니다.(Nonblocking) 그리고 Application은 System의 결과값을 신경쓰지 않고 Callback함수를 보내게 됩니다.(Async)
이후 System에서 준비가 완료되면 응답하게 됩니다.
'CS > 네트워크' 카테고리의 다른 글
TLS/SSL HandShake (0) | 2022.09.20 |
---|---|
HTTP & HTTPS (0) | 2022.09.20 |
대칭키 VS 공개키 (0) | 2022.09.20 |
UDP (0) | 2022.09.20 |
TCP/IP, 흐름제어 혼잡제어 (0) | 2022.09.20 |