Golang
-
한 달 동안 golang으로 Multi-thread-processing을 하면서 느낀 점Golang 2021. 1. 14. 13:52
한 달 동안 goroutine을 이용해서 30개 이상의 서버에 request를 날리는 멀티 스레딩 프로그래밍을 하면서 느낀 점? 경험? 교훈? 노하우?? 등을 여기에 정리하고자 한다. 코드를 보면서 글을 읽는 것이 프로그래머들한테 역시 편할 것이다. 귀찮지만 코드를 가져오겠다. 여기서 설명하는 코드는 일종의 pseudocode라고 봐도 무방하며, 동작을 시키기 위해서는 유효한 url을 적용하면 될 것이다. 이 글을 쓰는 주요 포인트는 일종의 로직을 설명하는 글이기 때문에, 동작 자체에 중점을 두기 보다 로직 구현에 중점을 두겠다. 우선 첫번째로 이 서버(프로그램)을 만든 배경을 설명하겠다. 이미 설치된 서버가 40개 이상 있고, 이 서버들은 모두 실시간으로 돌아가며 1초 단위로 데이터를 쏴주고 있다. 이..
-
동시성에 관하여Golang 2020. 11. 23. 13:08
동시성에 대해서 생각해보자. 동시성이란 무엇일까? 동시성은 computer science에서 흔히 병렬 처리(Parallelism)라고 불린다. CPU가 업무의 흐름을 별개로 논리적으로 수행하는 것을 의미한다. 논리적이라는 말을 쓴 이유는 물리적과의 구분이 필요하기 때문이다. 물리적으로 별개로 수행한다는 말은 아예 다른 컴퓨터에서 작업을 수행한다는 것을 의미한다. 반대로 논리적으로 별개의 수행은 메모리를 공유하게 된다. 그렇다면 예를 들어보자. 커피를 마시면서 신문을 보고 있는 사람이 있다면 병행처리일까? 답은 아니다. 커피를 마시기 위하여 잠시 신문 보는 것을 중단하고, 커피를 마신 뒤 다시 신문을 본다. 모든 동작이 한 시점에 동시에 행해지지는 않으나 어찌 됐든 동시에 두 가지 동작을 하고 있다. 말..
-
Go Threads 몇가지 패턴(channel 아님)Golang 2020. 11. 19. 11:42
1. Go Threads Patterns 1) closure 패턴 가장 단순한 Thread 패턴 package main import "sync" func main(){ var a string var wg sync.WaitGroup wg.Add(1) go func(){ a = "hello world" wg.Done() }() wg.Wait() println(a) } 2) loop 패턴 package main import "sync" func main(){ var wg sync.WaitGroup for i:=0; i
-
이제 더이상 GOPATH를 쓰지 않는 이유Golang 2020. 11. 18. 11:40
_ "golang의 진화로 Go Modules이 나온 상황에서 더이상 GOPATH설정은 필요하지 않게 되었다. 그럼에도 수많은 구글링에서 GOPATH Configuration을 언급하고 있다. 이 페이지에서는 GOPATH에 대한 설명과 Go Modules Configuration에 대해서 다룬다."_ 1. GOPATH란 무엇인가 간단하게 말해서 go에게 코드가 저장된 파일을 읽을 위치와 src파일을 다운받을 위치를 알려주는 것이다. 보통 go를 설치하고 가장 많이 하던 작업은 src, pkg, bin 세 폴더를 생성하여 /src/github.com/foo/bar와 같이 go project의 위치를 지정하는 것이었을 터다. 기존의 다른 프로그래밍 언어와는 다른 방식이며, OS Layer에서 GOPATH를 ..