예제로 살펴보는 Go : Rate Limiting

Rate Limitng는 주로 NIC(Network Interface Controller)에서 입력과 출력 트래픽의 양(rate)을 제어하기 하기 위해서 사용한다. 이 외에 컴퓨팅 자원을 나눠서 사용해야 하거나 QoS를 위해서 사용 한다. Go에서 제공하는 채널과 tickers를 이용하면 고루틴에 대한 Rate limiting을 손쉽게 구현할 수 있다. 9...

예제로 살펴보는 Go : Woerker pool

고루틴과 채널을 이용해서 워커풀을 만들어보자.worker 함수는 고루틴을 이용해서 cuncurrent 하게 실행한다. 작업은 jobs 채널로 받고, 결과는 results 채널로 보낸다. job 실행에 드는 비용은 time.Sleep()메서드로 시뮬레이션 했다. main() 고루틴은 jobs 채널과 results 채널을 만들고, 이들을 매개변수로 해서 wor...

예제로 살펴보는 Go : Tickers

time 패키지의 NewTicker를 이용해서 일정시간 간격으로 채널 메시지를 전달할 수 있다. 일정 간격으로 주기적으로 코드를 실행하는 프로그램 개발에 유용하게 사용 할 수 있다. time.NewTicker()메서드를 이용해서 0.5초 마다 메시지를 전송하는 채널을 만들었다. worker 고루틴은 0.5초 간격으로 채널로 부터 메시지를 받아서 코드를 실행...

예제로 살펴보는 Go : 타이머

Go에서 제공하는 time 패키지의 NewTimer메서드를 호출하면, 채널을 반환한다. NewTimer는 설정된 시간이 지난 후 채널에 메시지를 보내는데, 이를 이용해서 타이머를 구현 할 수 있다. 2초 후에 메시지를 전달하는 채널 데이터 timer1을 만들었다. 이 코드는 <-timer1.C에서 블럭된다. 2초 후 타이머가 작동해서 메시지를 수신하면 블럭...

예제로 살펴보는 Go : Range over Channels

for & range 를 이용해서 채널을 체크 할 수 있다.string 메시지타입의 크기가 2인 채널을 만들었다. 여기에 두 개의 메시지를 전송하고 채널을 close 했다. 채널을 close 한다고 해서 즉시, 채널을 close하는 건 아니다. 채널이 비워진 후에 비로서 close 된다. for & range 문을 이용해서 채널로 부터 메시지를 읽는다. 채...

예제로 살펴보는 Go : 채널 닫기

채널을 이용해서 worker 고루틴에 작업 메시지를 보낸다고 가정해 보자. 만약 더 이상 작업이 없다면, worker고루틴을 종료해야 할 것이다. 이를 위해서 worker는 더 이상 메시지가 없음을 측정 할 수 있어야 한다. 아래 예제를 보자.예제 프로그램의 main() 고루틴은 jobs채널을 이용해서 worker 고루틴과 통신을 한다. main 고루틴은 ...

예제로 살펴보는 Go : Non-Blocking 채널 사용

Go의 채널은 기본적으로 블럭킹(Blocking)모드로 작동한다. 하지만 select 의 default문을 이용해서 논 블록킹 채널을 구현할 수 있다. 논 블럭킹 채널을 이용하면 두 개 이상의 selects를 기다릴 수 있다.9~15 줄을 보자. message 채널에서 메시지를 기다리고 있다. 원래대로라면 메시지를 기다리면서 블럭돼야 겠지만, default...

Go - Concurrency

Go - Concurrency개념적으로 고루틴(Gorutines)은 thread, coroutines, processes 등과 혼동될 수 있다. 용어에 따른 개념의 혼란을 피하기 위해서 "고루틴"이라는 새로운 용어를 만들었다고 한다. 실제 사용하다보면, 멀티 스레드, 멀티 프로세스 등과 비슷하면서도 해석과 사용에 미묘한 차이가 있음을 알 수 있다. 고루틴...

Go HTTP 패키지 성능 측정

Go HTTP 패키지 성능 측정메시지 드리븐 방식의 웹 기반 API 서버를 개발해야 하는 요구 사항이 생겼다. 백엔드는 등의 고성능 소프트웨어(혹은 프로토콜을 사용하는)로 구성할 계획이라서, 웹 API 서버가 버틀랙이 될 것으로 예상하고 있다. 요즘에는 AWS로 인프라를 구축하고 있는데, 성능은 scale-out으로 해결한다는 기본 방향을 가지고 있다. ...

revel - Tutorial

revel - Tutorial 이미 을 만든 것으로 가정한다. 우분투 리눅스 14.04 go 1.3.1 # go get github.com/revel/revel# go get github.com/revel/cmd/revelrevel cli 툴이 설치된다.# revel help~~ revel! http~usageThe commands are new cre...