티스토리 뷰

golang

[golang]고언어 고루틴이란?

Xion 2021. 7. 28. 23:08

 

오늘은 고언어(golang)의 고루틴(gorutine)에 대해 알아보겠습니다 !

 




| Goroutine 고루틴

- 타 언어의 쓰레드(Thread)와 비슷한 기능

- 생성 방법 매우 간단, 리소스를 매우 적게 사용한다.

- 수 많은 고루틴 동시 생성 실행 가능

- 비동기적 함수 루틴 실행(매우 적은 용량 차이) -> 채널을 통한 통신 가능

- 공유 메모리 사용 시 정확한 동기화 코딩이 필요함.

- 싱글 루틴에 비해 항상 빠른 처리 결과는 아니다.

 

 

멀티 쓰레드의 장점 및 단점

장점

- 응답성 향상

- 자원 공유를 효율적으로 활용 & 사용

- 작업이 분리되어 코드가 간결하다.

 

단점

- 구현하기 어려움

- Test & 디버깅이 어렵다.

- 전체 프로세스의 side effect

- 성능 저하, 동기화 코등 반드시 숙지해야 한다.

 

 

example ) go rutine 사용 전

반복문을 활용한 클러저 호출

클러저를 활용하여 즉시실행 함수로 반복문안에서 호출하고 있는데

이때는 순서가 보장이된다.

 

하지만 ?

go rutine을 사용하면 어떻게 될까?

 

example ) go rutine 사용 후

고루틴을 활용

위 결과처럼 go rutine을 활용하면(go func) 순서가 보장되지 않는다.

 

즉, 반복문 클로저는 일반적으로 즉시 실행. But 고루틴 클로저는 가장 나중에 실행합니다.(반복문 종료 후)

for문이 1000번 돌기 전까지 go func는 실행되지 않고 기다렸다가 for 반복문이 끝나면 그제서야 우다다다 go func가 실행되기 때문에 어떤 값이 튀어나올지 예측 불가능합니다.