매일을 설렘으로

[Golang] 채널(channel) 의 장점 본문

카테고리 없음

[Golang] 채널(channel) 의 장점

하루설렘 2022. 6. 18. 18:39

 

Tuker의 Go언어 프로그래밍이라는 책을 읽으면서 배운 내용에 대해서 정리해보려고 한다. 

그 중에서도 채널 관련 부분이다. 

 

채널이라는 것은 고루틴간 메세지를 전달해주는 메세지큐이다.

고루틴은 하나의 쓰레드와 1:1 매칭되어있기때문에 쓰레드라고 생각하면 쉽다. 

 

채널은 어떤 장점이 있을까? 채널을 통해서 뮤텍스 없이 동시성 프로그래밍이 가능하다. 

어떻게 동시성 처리를 할 수 있을까? 아래와 같다. 

 

마치 공장과도 같다. 차량 생산 공정을 예를 들어보면

세 가지 설비(고루틴)가 각 역할을 하고 있다.

 

바디 생산 - 타이어 연결 - 페인트 

 

세 공정이 읽고 쓰는 메모리가 다르다는 가정 하에 서로의 공정 시간에 영향을 주지 않는다. 

그렇기 때문에 Tack Time에 영향을 주지 않고 Mutex가 필요 없는 것이다. 

 

반면에 세 고루틴이 모든 공정을 맡아서 진행하면 경쟁 상태에 놓이게 되어 동시성 문제가 발생할 수 있고, 이로 인해 

Tack Time에 영향을 줄 수 있다. 

 

2. 생산자 - 소비자 패턴

 

하고 있는 업무 역시 생산자 - 소비자 패턴으로 변경해서 얼마나 줄어들 수 있는지 확인 한번 해봐야겠다...