본문 바로가기

concurrency4

Effective Go - Concurrency - 3 - 출처: https://go.dev/doc/effective_go#parallel - Parallelization 앞의 파트(Concurrency - 2)까지 알아보았던 동시성과 관련해서 여러 개의 Core를 사용하여 계산을 병렬처리 하는 부분도 생각해볼 수 있다. 만약 계산이 독립적으로 실행될 수 있는 조각들로 분리될 수 있다면 각 조각들의 완료 여부를 channel을 통해 signal을 보내면 병렬화가 가능하다. vector의 요소들이 비용이 큰 연산들로 구성되어있고 각 요소의 연산 값이 독립적인 경우를 생각해보자. type Vector []float64 // Apply the operation to v[i], v[i+1] ... up to v[n-1]. func (v Vector) DoSome(i.. 2022. 6. 2.
Effective Go - Concurrency - 2 - 출처: https://go.dev/doc/effective_go#channels - Channels channel은 map처럼 make 문법을 통해서 할당하며 결과값은 데이터 구조에 대한 참조 역할을 한다. 만약 2번째 인자로 integer parameter를 주면 channel에 대한 버퍼 사이즈를 설정한다. 기본값은 0이며, 0이면 버퍼를 갖지 않는(unbuffered) 동기화 channel을 의미한다. ci := make(chan int) // unbuffered channel of integers cj := make(chan int, 0) // unbuffered channel of integers cs := make(chan *os.File, 100) // buffered channel of.. 2022. 6. 1.
Effective Go - Concurrency - 1 - 출처: https://go.dev/doc/effective_go#concurrency - Share by communicating 동시성 프로그래밍은 매우 방대한 주제이다. 동시성 프로그래밍은 공유 변수에 대한 정확한 접근을 구현하기 위해 요구되는 미묘한 부분 때문에 어려운 주제이기도 하다. Go 언어는 공유되는 값들이 channel 이라는 개념을 통해 전달되고, 실제로는 실행되는 각 스레드들에서 공유가 활성화되지 않는 색다른 접근방식을 제안한다. 어느 시점에서든 하나의 값에는 하나의 goroutine만 접근이 가능하다. 이런 설계때문에 data race가 일어나지 않는다. effective go 문서에서는 이런 사고방식을 장려하기 위해 하나의 슬로건으로 이를 요약하고 있다. Do not commun.. 2022. 6. 1.
Go - Concurrency - 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/concurrency - 개요 Go의 병렬 프로그래밍인 concurrency(go 문법)에 대해 알아보자. goroutine과 channel을 사용해본다. - CheckWebsites 예제 아래와 같이 URL 들의 응답 상태를 확인하는 CheckWebsites 함수가 있다고 하자. package concurrency type WebsiteChecker func(string) bool func CheckWebsites(wc WebsiteChecker, urls []string) map[string]bool { results := make(map[string]bool) for _, url :.. 2022. 1. 4.