Sad Puppy 3 [묘공단] Go언어 고급 24-25장(고루틴, 동시성 프로그래밍, 채널, 컨텍스트) :: 개발자 아지트

고루틴, 동시성 프로그래밍

 

 

고루틴은 경량화 된 스레드로서 컨텍스트 스위칭 비용이 발생하지 않는다. 

 

코어가 여러개인 멀티 코어 환경에서는 고루틴을 여러개 사용해 성능을 높일 수 있다. 

 

고루틴 여러개가 같은 메모리 영역을 조정할 경우, 예상치 못한 문제가 발생 가능하다. 

 

뮤텍스는 고루틴 하나만 동시에 자원에 접근할 수 있도록 조정한다. 

 

뮤텍스를 잘못 사용할 경우, 데드락에 문제가 발생할 수 있다. 

 

Go에서 뮤텍스 없이 동시성 프로그래밍을 하기 위해 작업 분할 방식 혹은 역할 분할 방식을 통해 작업할 수 있다. 

 

 

 

 

채널, 컨텍스트

 

채널은 고루틴 간의 메시지를 전달하는 메시지 큐이다. 

이를 통해 뮤텍스 없이도 동시성 프로그래밍이 가능하다.

 

동시성 프로그래밍에서 생산자와 소비자 패턴이 많이 사용되며, 이는 Go에서 채널을 이용해 구현 가능하다. 

 

컨텍스트란?

 

작업자에게 일을 지시할 때 사용하는 일종의 작업 명세서이다. 

이를 통해 특정 시간 동안만 작업을 지시하거나, 외부에서 작업 취소가 가능하다. 

 

만약 채널을 제때 닫지 않을 경우, 무한 대기를 지속하는 좀비 루틴이 발생되어 프로그램 성능을 떨어트리고 메모리 사용을 지속적으로 증가시키는 문제가 생길 수 있다. 

 

 

 

 

 

 

해당 글은 [Tucker의 Go 언어 프로그래밍] 24장~25장을 읽고 공부한 글입니다. 

+ Recent posts