루틴(Routine)
프로그램이 실행될 때 불려져서 실행되도록 만들어진 일련의 코드들
반복해서 사용 가능
프로시저(Procedure), 함수(Funtion)와 같은 의미
메인 루틴과 서브 루틴
기존의 코드 진행 흐름이 메인 루틴
메인 루틴 흐름 속에서 호출되는 다른 루틴이 서브 루틴
기본적으로 서브 루틴은 호출되면 루틴이 끝날 때까지 실행된다
서브 루틴이 종료될 때 할당 받은 스택을 반환하기 때문에 메인 루틴에 복귀하면 서브 루틴의 데이터는 사라진다
서브 루틴은 메인 루틴에 종속적이다
코루틴(Co-Routine)
Cooperative Routine
서브 루틴과 달리 메인 루틴에 종속적이지 않고 대등한 관계
-> 서로가 서로에게 코루틴
서브 루틴과 달리 메인 루틴으로 복귀해도 코루틴은 종료되지 않는다
-> 코루틴의 데이터가 유지
메인 루틴은 코루틴에서 복귀 후에 다시 코루틴으로 진입할 수 있다
-> 이전 호출이 끝나고 정지된 곳에서 다시 시작
동시성 관점에서의 코루틴
동시성은 여러 작업이 동시에 진행되는 것
CPU가 정해진 정책에 따라 여러 작업을 바꿔가면서 구현
-> 실질적으로 한 순간에 진행되는 작업은 하나
대표적인 작업의 단위는 Thread
-> 코루틴은 Object 단위
-> 하나의 Thread이 여러 코루틴을 수행할 수 있다
-> 코루틴은 Thread보다 더 작은 작업 단위
Thread는 독립적인 스택을 가지기 때문에 Context Switch가 일어날 때 스택을 바꿔줘야 한다
-> 코루틴은 Context Switch가 필요없다
-> 코루틴 단위의 동시성 구현은 Context Switch 비용이 없다
'기본' 카테고리의 다른 글
[linux] zsh + oh-my-zsh 설치 및 설정 (0) | 2023.10.27 |
---|---|
ssh-key 설정 (0) | 2023.10.23 |
함수 기반 뷰와 클래스 기반 뷰 (1) | 2023.06.03 |
공유기 (0) | 2023.05.22 |
대칭 키 / 비대칭 키 암호화 (0) | 2023.05.07 |