반응형 Study/Go21 [Go] 고루틴(GoRoutine) 심화(4) - channel Channel Channel 이란? 고루틴을 사용하는 데 있어서 데이터를 전달하는 가장 효과적인 방법이다. 데이터를 전달하는데 통로 역할을 한다. 채널을 사용하는 데 있어 서로 간에 많은 정보를 알 필요는 없으며 채널에 대한 주소 값만 알면 채널을 통해 데이터를 송신하고 수신할 수 있다. Channel의 종류 양방향 채널 (chan interface{}) 데이터를 송신하고 수신하는 역할 모두 가능하다. 송신용 채널 (chan 2022. 5. 15. [Go] 고루틴(GoRoutine) 심화(3) - sync.Pool Pool Go는 GC(Garbage Collector)가 존재하는 언어이다. 그렇기에 사용하지 않는 객체는 GC가 이를 알아차려 정리하고자 할 것이다. 그러나 객체를 생성하는데 굉장히 오랜시간이 걸리고 당장엔 사용하지 않지만 이를 재사용할 가능성이 높다면 GC가 삭제하는 것은 큰 효율성 저하를 불러올 것이다. 또한 많은 객체를 생성해야 할 필요가 있는 객체역시 만들어 놓은것을 재사용한다면 메모리적으로도 크게 이득을 볼 수 있을 것이다. 이를 효율적으로 관리해 주는 것이 Pool이라 불리는 객체 저장소이다. 그리고 Go 언어는 이 기능을 Sync 패키지에 내장해 두었고 이것이 sync.Pool 이다. Sync.Pool의 기본 기능 GET 풀에 저장된 인스턴스를 불러오는 함수. NEW 풀에 저장된 인스턴스가.. 2022. 5. 13. [Go] 고루틴(GoRoutine) 심화(2) - 클로저 함수, 메모리 클로저 함수를 통해 고루틴을 생성한다면 어떤 일이 생길까? 그리고 이 부분에서 무엇을 배울 수 있을까? 책에서는 짧게 설명하고 넘어가는 부분이다. 하지만 나는 쉽게 이해할 수 없었고 그 이유를 찾기 위해 노력했다. 그리고 그 이유는 Go 언어가 메모리를 어떻게 사용하는지 모르기 때문인 것을 알 수 있었다. 그렇기에 이번 포스팅에서는 클로저 함수를 통해 고루틴을 생성하는 것에 대한 예제와 결과를 통해 Go에서 메모리를 어떻게 사용하는지 까지 정리해 보려 한다. 우선 짧은 예제를 살펴보자. 예제 코드 package main import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup val := "memory 1" wg.Add(1) go func() { defe.. 2022. 4. 28. [Go] 고루틴(GoRoutine) 심화(1) - 합류지점 최근 고루틴에 대해 깊이 이해하고 사용하고 싶은 욕심이 있어 캐서린 콕스 부데이가 짓고 O'Reilly에서 출판한 Concurrency in Go 책을 읽으며 공부하고 있다. 하지만 어느 정도 용어에 대한 지식이 필요한 듯해 보이고 나는 아직은 그 정도 내공을 갖추지 못한 듯하다. 그렇기에 이렇게 블로그에 기록하며 공부하려 한다. 기존의 게시물에서는 고루틴을 사용하는 방법을 알아봤다면 이 게시물에서는 보다 풍부하게 사용하기 위한 원리를 함께 알아보고자 한다. 고루틴 간단한 고루틴을 사용하는 예시 코드를 보겠다. 코드 package main import ( "fmt" ) func main() { go sayHello() } func sayHello() { fmt.Println("hello") } 결과 고루.. 2022. 4. 16. [Go] Go에서 DI는(1) - DI란? 우리나라는 왜 Java를 사용할까? Java 중에서도 왜 Spring 프레임워크를 사용할까? 단지 선점효과일까? 하지만 그렇게 생각한다 해도 개발에 있어 효율적이지 않다면 선점이 되지도 않았을테다. 그렇다면 Spring을 사용함으로써 얻는 이점이 무엇이길래 Spring을 사용할까? 나는 궁금해졌다. 그리고 확인해 보고싶었다. 그래서 나는 인프런에서 스프링 기본 강의를 결제해서 들어 보았고 사람들이 많이 사용하는 이유를 어렴풋이라도 이해할 수 있었다. Spring을 공부하고 사용한다면 가장 처음 배우고 가장 강조되는 개념인 DI(Dependency Injection), 의존성 주입. 어떠한 언어를 사용한다 해도 꼭 필요한 기술인 듯 했다. 프로젝트를 위해, 그리고 개발자를 위해. DI(Dependency .. 2022. 4. 9. [Go] Go의 메모리 할당 들어가기 전 Java를 공부하기 시작하면서 JAVA가 어떻게 메모리를 사용하는지 확인하게 됐다. JAVA는 Static, Stack, Heap 이렇게 세 종류의 구분을 두어 메모리를 관리했고 이 부분은 다음에 다시 언급할 기회가 있을 듯하다. 그렇다면 Go는 어떨까? JAVA에서의 Static은 Class를 주로 저장하는 듯한데 Class가 없는 Go는 어떨까?라는 의문을 가지고 Go가 메모리를 사용하는 방법을 살펴보았다. Go의 메모리 할당 우선 Class가 없어서 인지는 모르겠지만 Go는 Stack과 Heap 두 종류로 구분돼 있음을 확인했다..! 그렇다면 이 두 메모리를 어떻게 사용하고 있을까? 같이 알아보도록 하자! Stack Stack을 사용할 때의 코스트는 적다.(가볍다.) Stack에 메모리.. 2022. 4. 8. 이전 1 2 3 4 다음 반응형