K-digital traning/과제

[광복절 과제]

내꺼블로그 2023. 8. 16. 01:10

1. 동기와 비동기

 

동기와 비동기는 컴퓨터가 서로 다른 작업들을 처리할 때 사용하는 방식으로 이 둘은 '동시에 일어나는가'를 기준으로 구분된다.

 

(1)동기(synchronous)

동기는 작업의 요청과 결과가 동시에 이루어져야 된다는 의미로 요청된 작업에 대한 결과가 돌아오기 전까지는 다른 작업을 수행할 수 없다. 다른 작업이 수행되려면 처리 중인 작업이 완료되어 그 결과가 반환되어야만 수행될 수 있다.

순차 방식으로 작업을 처리해야 하는 상황에서는 유용하지만 대기 시간이 보다 요구된다는 단점이 있다.

동기식 처리방식의 예시로 '사용자 인터페이스(UI)', 전화 등이 있는데 주로 요청에 대한 즉각적인 응답이 요구되는, 작업간의 상호의존성이 드러나는 상황에서 자주 쓰인다.

 

(2)비동기(asynchronous)

동기는 비동기와 달리 먼저 요청된 작업의 결과를 반환받지 않아도 다른 작업들을 동시에 수행할 수 있다는 특징이 있다.

동시에 여러 작업들을 수행할 수 있어 대기 시간을 절약할 수 있지만 돌아오는 결과의 순서는 뒤죽박죽일 수 있다.

비동기 처리방식은 주로 서로 독립적인 작업들을 수행할 때 사용된다.

 

 

 

2. 프로세스(Process), 스레드 (Thread), 코루틴 (Coroutine)

 

(1)프로세스

메모리에 적재되어 실행 중이거나 실행 준비 상태에 놓인 프로그램을 의미한다.

과거에는 프로그램 당 하나의 프로세스로 작업을 처리하였으나 기술이 발전함에 따라 프로그램이 복잡해지면서 프로그램을 하나의 프로세스로 작업하기에는 처리 시간이 비효율적이었으며 여러 개의 프로세스를 할당하기에는 프로세스 하나 당 자원을 제공해야 했기에 자원중복이라는 낭비가 초래되었다.

이를 위해 나타난 것이 뒤에 나올 스레드인데, 이로 인해 현재의 프로세스는 작업 실행 단위가 아닌 스레드에게 자원을 제공하는 컨테이너의 역할이 되었다.

 

(2)스레드

앞선 프로세스 단위 처리의 문제점을 보완하기 위해 나타난 개념으로 프로세스보다 더 작은 단위로 프로세스 내부에서 직행되는 작업의 단위를 의미하며 한 프로세스 안에서 한 개 이상 존재한다.

같은 프로세스 안에 있는 스레드들은 프로세스의 자원들을 서로 공유한 체 독립적으로 작업을 수행하지만 스레드 각각의 진행이 프로세스 내부 다른 스레드들에게 영향을 미치며 비동기식으로 수행한다는특징이 있다.

 

(3)코루틴

코루틴은 비선점형 멀티태스킹을 구현하기 위해 서브루틴을 일반화한 프로그램의 구성 요소로 비동기식으로 작업을 처리한다.

여기서 비선점형이란 하나의 프로세스가 CPU를 차지하고 있을 때 종료되기 전까지는 다른 프로세스가 CPU를 차지할 수 없음을 의미한다.

서브루틴은 프로그램의 메인 함수 안에서 수행되는 각각의 함수를 의미한다.

즉 코루틴은 잘게 쪼개어진 서브루틴들을 번갈아 수행함으로써 동시에 여러 작업을 수행하는 것처럼 보이는 방식인 셈이다.

 

 

3. 스레드와 코루틴 차이점

스레드는 여러 작업을 병렬로 수행하는데 반해 코루틴은 실제로 병렬로 수행하는 것이 아닌 여러 작업을 잘게 쪼개어 작업을 번갈아가며 수행한다.