고루틴, 동시성 프로그래밍
고루틴은 경량화 된 스레드로서 컨텍스트 스위칭 비용이 발생하지 않는다.
코어가 여러개인 멀티 코어 환경에서는 고루틴을 여러개 사용해 성능을 높일 수 있다.
고루틴 여러개가 같은 메모리 영역을 조정할 경우, 예상치 못한 문제가 발생 가능하다.
뮤텍스는 고루틴 하나만 동시에 자원에 접근할 수 있도록 조정한다.
뮤텍스를 잘못 사용할 경우, 데드락에 문제가 발생할 수 있다.
Go에서 뮤텍스 없이 동시성 프로그래밍을 하기 위해 작업 분할 방식 혹은 역할 분할 방식을 통해 작업할 수 있다.
채널, 컨텍스트
채널은 고루틴 간의 메시지를 전달하는 메시지 큐이다.
이를 통해 뮤텍스 없이도 동시성 프로그래밍이 가능하다.
동시성 프로그래밍에서 생산자와 소비자 패턴이 많이 사용되며, 이는 Go에서 채널을 이용해 구현 가능하다.
컨텍스트란?
작업자에게 일을 지시할 때 사용하는 일종의 작업 명세서이다.
이를 통해 특정 시간 동안만 작업을 지시하거나, 외부에서 작업 취소가 가능하다.
만약 채널을 제때 닫지 않을 경우, 무한 대기를 지속하는 좀비 루틴이 발생되어 프로그램 성능을 떨어트리고 메모리 사용을 지속적으로 증가시키는 문제가 생길 수 있다.
해당 글은 [Tucker의 Go 언어 프로그래밍] 24장~25장을 읽고 공부한 글입니다.
'Golang' 카테고리의 다른 글
[묘공단] Go언어 프로그래밍 29-31장(웹서버 만들기, RESTful API서버 만들기) (2) | 2024.03.28 |
---|---|
[묘공단] Go언어 프로그래밍 27-28장(SOLID, 테스트와 벤치마크) (0) | 2024.03.28 |
[묘공단] Go언어 고급 22-23장(자료구조, 에러 핸들링) (0) | 2024.03.09 |
[묘공단] Go언어 고급 20-21장(인터페이스, 함수 고급) (1) | 2024.03.09 |
[묘공단] Go언어 고급 18-19장(슬라이스, 메서드) (0) | 2024.02.05 |