본문 바로가기
Computer Science

Coroutine vs Thread

by yongmin.Lee 2020. 10. 24.

1. Subroutine

C언어 등에서 일반적으로 사용하는 함수는 시작할 때 진입하는 지점이 하나 존재하고 함수가 모두 실행되거나, return 구문에 의해 종료되는 지점을 설정할 수있다. 이러한 함수를 Subroutine 이라고 한다.

 

2. Coroutine

개요

  • 코루틴은 subroutine을 더 일반화한 개념으로 진입하는 시점까지 여러 개를 가질 수 있는 함수를 의미한다
  • C#, JavaScript, Python 등이 제공하는 Generator가 사실 코루틴의 한 형태이다
  • caller가 함수를 call하고, 함수가 caller에게 값을 return하면서 종료하는 것에 더해 return하는 대신 suspend(혹은 yield)하면 caller가 나중에 esume하여 중단된 지점부터 실행을 이어갈 수 있다.
  • 즉, 코루틴 함수가 호출되면 코루틴 함수 내부코드가 실행되고 있다가 suspend 혹은 yield에 의해 함수가 호출된 부분에 값이 반환되고 이후 다시 코루틴 함수를 호출하게 되면 코루틴 함수 내부에 suspend 혹은 yield 지점 이후 코드로 돌아와서 실행을 하게 된다

특성

  • 특정 작업을 단계적으로 발생하게 한다.
  • 시간 흐름에 따라 발생하는 루틴을 작성할 수 있다.
  • 다른 연산이 완료될때까지 기다리는 루틴을 작성할 수 있다.
  • 비동기가 아니다. = 동시에 발생하지 않는다.

 

3. Thread

개요

  • 스레드는 실제 다른 스레드와 함께 동시에 코드가 실행 될 수 있어서 다른 스레드가 특정 부분을 읽고 있는 동시에 그것을 변경할 수 있다.
  • 공유된 자원을 읽거나 변경시켜야 되는 경우라면, 공유된 자원으로 부터 다른 스레드를 잠궈버림으로써( Lock ) 이런 상황이 발생하지 않도록 해야한다.
  • 스레드를 이용하면 하나의 프로그램에서 한 번에 하나의 일을 처리하는 것이 아니라 동시에 많은 일을 처리할 수 있다.

특성

  • 비동기 이다. = 동시에 발생한다

 

 

4. Multi-thread vs Coroutine

코루틴은 비동기가 아니므로 동기화가 필요없다

멀티쓰레드는 동기화가 필요

 

'Computer Science' 카테고리의 다른 글

Concurrency vs Parallelism  (0) 2020.10.24