관리 메뉴

hyeals study

코루틴 이해하기 1 본문

코틀린

코루틴 이해하기 1

hyeals 2020. 6. 19. 16:37

코루틴(Coroutine)이란?

  • 비선점(non-preemptive)멀티태스킹서브루틴(subroutine) 형태

  • 지연(suspend-잠시 중단)재개(resume-물러나 있다가 다시 실행)가 가능

  • 협력형(cooperative)태스크와 비슷하게 동작(Context switching이 없고 최적화된 비동기 함수를 통해 비선점형으로 작동하는 특징 때문) → 동시성을 제공함(병행성×)


코루틴을 이해하기 위한 개념들

◎ Task

☞ 프로그램상에서 특정 할 일, OS상에서 표현하는 방법은 여러가지로 나뉘는데 그 중 Process와 Thread가 있음.

 

  Process Thread
메모리 독립적인 메모리 공유 메모리
스택 독립적인 스택 독립적인 스택

* Process

☞ 하나의 Program이 실행되면 시작됨

☞ Process와 다른 Process는 서로 완전히 독립적임

☞ Process간에 Context switching 비용이 많이

* Thread

☞ 자신의 독립적인 스택만 가지고 나머지는 Thread끼리 공유함

☞ Context switching 비용이 적게

* Context switching

☞ 하나의 Process나 Thread가 CPU를 사용하고 있는 상태에서 다른 Process나 Thread가 CPU를 사용하도록 하기 위해 이전의 Process 상태(Context)를 보관하고 새로운 Process의 상태를 적재하는 과정 

* OS

☞ Task를 어떤 식으로 동작시킬 것인지 정함

* Scheduler

어떤 Task를 동작시킬 것인지 정함

* 멀티 태스킹(multi-tasking)

여러 작업을 동시에 수행하는 것처럼 보이거나 실제로 동시에 수행하는 것


◎ Scheduler

 

☞ CPU내의 공간을 어떻게 잘 활용할 것인지를 결정함

 

- CPU내에는 여러 개의 코어가 들어가 있음(멀티 코어의 경우에) → 이 코어에 Task를 올려야 함 → 스케줄러는 실행 대기중인 Task가 모여있는 공간인 ready queue를 보고 우선순위에 따라 Task가 실행되도록 Task를 코어에 할당되게 함.

 

- 선점형(preemptive): 실행되고 있는 Task를 스케줄러가 중단시키고 다른 Task를 코어에 할당 되도록 하는 작업

(비선점형은 반대 개념임-스케줄러가 실행되고 있는 Task를 중단시킬 수 없음 )


◎ 프로그램(Program)

 

1. 실행되지 않은 프로그램

- HDD나 SSD에 저장되어 있음

- 명령어, 데이터(초기화, 비초기화), 기타(심볼[ex. 함수 이름]등)이 저장되어있음

 

 

2. 실행되고 있는 프로그램

- RAM(주기억장치)에 올라감

- 실행함과 동시에 추가 메모리가 필요함 → Heap(동적 메모리 영역), Stack(임시 메모리 영역)

 

* 멀티 프로세스

☞ 프로세스가 여러 개 있어서 한꺼번에 여러 개의 일을 동시에 처리하는 것(병행 처리 = Parallism)

* 동시성

☞ 여러 개의 프로세스를 번갈아 가면서 수행하는 것.

☞ 실제로 그렇지 않지만 마치 동시에 수행하는 것처럼 보임


◎ 협력형 멀티 태스크

☞ 다수의 루틴을 정해진 규칙에 따라 실행 시간을 나눠 갖는 것

☞ Task들이 자발적으로 양보해서 실행을 바꿀 수 있음

- 하나의 루틴은 자발적으로 지연(suspend)하거나 중단(stop)할 수 있음

 

* 동기(synchronous)

☞ 순서대로 작업을 수행해서 1개의 루틴을 완료한 후 다른 루틴을 실행하는 방법 (=순차적 프로그램)

 

* 비동기(asynchronous)

☞ 여러개의 루틴이 선행 작업의 순서나 완료 여부에 상관없이 실행됨

☞ 순차적 실행과는 반대되는 말임. 협력적이거나 동시적 또는 병행적으로 실행됨

* 블로킹(blocking)

☞ 호출된 함수가 자신의 작업을 모두 끝낼때까지 제어권을 가지고 있어 호출한 함수가 대기하도록함

* 논블로킹(non-blocking)

☞ 호출된 함수가 바로 return 해서 호출한 함수에게 제어권을 주어 다른 일을 할 수 있도록 함


◎ 서브 루틴

☞ 여러 명령어를 모아 이름을 부여해서 반복 호출할 수 있게 정의한 프로그램 구성 요소(=함수)(객체 지향 언어에서는 메소드도 서브루틴임)

 

※ 따라서 코루틴이란 서로 협력해서 실행을 주고받으며 작동하는 여러 서브루틴을 말함

'코틀린' 카테고리의 다른 글

코루틴 이해하기 2  (1) 2020.06.19
Data 클래스  (0) 2020.06.16
map 함수  (0) 2020.06.15
[코틀린] 제네릭 타입 파라미터  (0) 2020.02.28
[코틀린] 고차 함수  (0) 2020.02.27
Comments