hyeals study
코루틴 이해하기 1 본문
코루틴(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 |