동시성 프로그래밍

    chan chan 활용법 - 3. 시그널 채널의 채널로 이용하기

    해당 시리즈는 Golang Korea 페이스북 그룹 최흥배님의 번역 글에서 영감을 얻었으며 Go언어와 Go언어를 이용한 동시성 프로그래밍에 관해 어느정도 알고 있는 독자를 대상으로 한다. 이전 글에서는 순서가 보장되는 워커풀 패턴으로 이용하는 채널의 채널 활용법에 대해 알아보았다. 해당 활용법은 성능에 초점을 두었다. 이번 활용법은 성능 보다는 구조에 초점을 둔다. 다른 프로젝트에서 이따금씩 쓰이기 때문에 알아두는 것이 좋다. 시그널 채널 시그널 채널은 닫힐 때까지 코드의 실행을 멈추게 하는 채널이다. 원리는 다음과 같다. 채널은 데이터를 보낼 때 해당 채널로 데이터를 받거나 닫힐 때까지 다음 코드로 넘어가지 않고 기다리는 특성이 있다. 그리고 시그널 채널은 기본적으로 데이터를 받지 않도록 한다. 두 문..

    chan chan 활용법 - 2. 순서가 보장되는 워커 풀 패턴으로 이용하기

    해당 시리즈는 Golang Korea 페이스북 그룹 최흥배님의 번역 글에서 영감을 얻었으며 Go언어와 Go언어를 이용한 동시성 프로그래밍에 관해 어느정도 알고 있는 독자를 대상으로 한다. 이전 글에서는 채널을 변수로 취급하는 채널의 채널 활용법에 대해 알아봤다. 채널의 채널을 보게 된다면(채널의 채널 자체가 흔하지는 않겠지만) 해당 형태로 가장 많이 볼 것이다. 다음 두 글에 걸쳐 설명할 활용법들은 흔히 보이지 않을 뿐더러 해당 방법들을 몰라도 Go언어를 사용하는 데에 있어서 문제는 없을 것이다. 하지만 특정 상황에서는 요긴하게 쓰이리라 장담할 수 있다. 이번 글에서는 이 중 특정 상황에서 성능을 크게 끌어올릴만한 방법을 소개하고자 한다. 워커 풀 패턴 이에 앞서 생소할 수 있는 워커 풀 패턴에 관해 이..

    chan chan 활용법 - 1. 채널을 변수로 취급하기

    해당 글은 Golang Korea 페이스북 그룹 최흥배님의 번역 글에서 영감을 얻었으며 Go언어를 어느 정도 알고 있는 독자를 대상으로 한다. Go 언어의 채널(chan)은 특정 자료형의 변수들의 통로이다. 그리고 채널 역시 하나의 자료형이다. 즉, 채널 타입을 받는 채널 역시 문법적으로는 가능하다. 다만, 통로의 통로라는 것은 꽤나 이상하게 들린다. 이렇게 이해부터 쉽지 않은 채널의 채널(이하 chan chan)은 과연 이론의 영역에만 머무를까? 당연히 이 글을 작성한 이유는 chan chan이 나름 실용적으로 이용될 수 있다는 것을 보여주기 위함이다. 필자는 chan chan의 활용법을 3가지로 분류했으며 3개의 글로 나눠서 설명할 예정이다. 해당 글은 이 중 가장 직관적인 활용법에 대해 설명하고자 ..

    파이프라인 패턴

    들어가기에 앞서... 해당 패턴은 동시성 프로그래밍에 기반한 디자인 패턴이기 때문에 동시성 프로그래밍을 지원하는 언어가 아닌 경우 이 글이 별로 도움이 되지 않을 것이다. 또한 해당 글은 Go언어만의 문법을 쓰기 때문에 동시성 프로그래밍을 지원한다 하더라도 다른 언어에서는 구현 방법이 다를 수 있다. 즉, 해당 글은 Go언어 사용자 중 동시성 프로그래밍에 대한 기본 개념(고루틴, 채널)에 대한 기본 지식이 있는 독자를 대상으로 한다. 파이프라인 패턴은 디자인 패턴 중 실행 패턴이다. 디자인 패턴 목록에 나열한 글에 없다고 의아해할 수 있다. 맞다. 해당 패턴은 전통적인 디자인 패턴('GoF의 디자인 패턴'에 포함된 패턴)은 아니다. 이는 해당 패턴이 일반화되지 않았다거나 바람직하지 않다는 것을 뜻하는 것..