현문hyun답
[현문hyun답] go의 goroutine(고루틴), kotlin의 coroutine(코루틴), typescript의 generator(생성기), roblox lua의 corotuine(코루틴) 비교
Hyun-danpung2
2024. 8. 13. 01:10
728x90
반응형
0. 서론
- Go 언어나 Kotiln 언어는 웹, 앱 또는 서버 등을 제작할 때 사용하게 되었는데, 기존에 주로 사용하던 Java나 Javascript에서는 쉽게 접하지 못했던 고루틴과 코루틴을 접하게 되었다.
- Typescript의 생성기는 zepeto(제페토) 게임을 만들면서 접하게 되었는데 zepeto unity에서 typescript로 코드를 작성하면서 게임 내에 필요한 비동기적 작업을 generator로 쓰게 되었다.
- Roblox Lua의 코루틴은 Roblox 게임을 만들면서 접하게 되었고 상당히 자주 사용하게 되었다.
- 여러 언어를 사용하면서 이름은 다르지만 비슷한 기능을 사용하고 있다는 점에서 흥미가 생겨 비교를 해보게 되었다.
1. Go의 gorotuine(go 루틴, 고루틴)
- Go 언어에서 경량 스레드로써, go 키워드를 사용하여 함수를 비동기적으로 실행
- 스택 크기가 작고, 필요에 따라 동적으로 확장
- 수천 개의 고루틴을 동시에 실행할 수 있을 정도로 높은 동시성을 지원
- 채널(Channel)을 통해 고루틴 간 통신이 가능
go func() {
// 비동기 작업
}()
2. Kotlin의 coroutine(코루틴)
- 비동기 프로그래밍을 위한 경량 스레드
- suspend 키워드를 사용하여 일시 중단 가능 함수로 정의
- 비동기 작업을 동기식 코드처럼 작성할 수 있게 해줌
- launch, async 등의 빌더를 사용하여 실행
- 코루틴 컨텍스트를 통해 스레드 풀을 관리
GlobalScope.launch {
// 비동기 작업
}
3. Typescript의 generator(생성기)
- function* 구문으로 정의
- yield 키워드를 사용하여 값을 일시적으로 반환하고, 이후 상태를 유지하면서 다시 실행할 수 있는 함수
- 비동기 처리를 위한 Promise와 결합하여 사용
- iterator(반복자) 패턴을 지원하여 상태를 관리
- 비동기 로직을 순차적으로 작성할 수 있음
function* generatorFunction() {
yield 1;
yield 2;
}
4. Roblox Lua의 coroutine(코루틴)
- 여러 실행 흐름을 동시에 관리할 수 있음
- create, resume, yield 등의 함수로 제어
- 멀티 스레딩을 지원하지 않지만, 비동기적으로 작업을 수행할 수 있음
- 상태를 저장하고 복원할 수 있어, 비동기 작업을 쉽게 작성할 수 있음
co = coroutine.create(function()
coroutine.yield()
end)
5. 비교
- 경량성 및 성능
- 고루틴과 코틀린의 코루틴은 경량 스레드로 많은 수를 동시에 실행할 수 있음
- 생성기와 루아 코루틴은 주로 하나의 실행 흐름을 관리하는데 중점
- 사용 용도
- 고루틴과 코틀린의 코루틴은 서버 사이드 프로그래밍에 적합
- 생성기는 클라이언트 사이드에서 비동기 처리를 단순화하는데 유용
- 루아 코루틴은 게임 내 비동기 처리를 위한 도구
6. 결론
다양한 언어를 접하면서 느끼는 점은 한 가지 언어를 활용해 보았다면 비슷한 작업을 다른 언어로 그리 어렵지 않게 할 수 있다는 것이다.
728x90
반응형