동시성

주의 반복문에서 고루틴을 돌리면 신기하게 결과물이 나올 때가 있습니다. 아래 코드를 실행했을 때의 결과는 무엇일까요? import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup for _, text := range []string{"a", "b", "c"} { wg.Add(1) go func() { defer wg.Done() fmt.Println(text) }() } wg.Wait() } 만약 a, b, c가 랜덤으로 출력 것이라 생각하신다면 틀렸습니다 결과는 아래와 같습니다. c c c 왜 이런 일이 이유는 루프문이 고루틴보다 먼저 끝나서 고루틴에서 사용할 수 있도록 메모리를 힙으로 옮겼기 때문입니다. 즉 for문이 먼저 끝나서 text의 값은 마지막 ..
동시성이란 Go에서의 동시성을 설명하기에 앞서서 동시성이란 무엇이고 병렬성이랑 뭐가 다른지 확인해 봅시다. 병렬성 : 실제로 물리적으로 같은 시간에 계산되는 물리적 동시성 동시성 : 같이 실행될 거라는 논리적 동시성 이를 코드와 프로그램에 적용하면 아래와 같습니다. 동시성은 코드로 알 수 있는 것이고 병렬성은 실제 연산을 통해서 알 수 있다. 위 개념으로 아래 3가지 개념을 알 수 있습니다. 우리는 병렬적으로 실행될 거라 생각하며 동시성을 지닌 코드를 짠다. 멀티 코어 환경에서 코드를 짜더라도 진짜 병렬로 실행되는지 알기 어렵다. (플랫폼, CPU를 통해야 함) 그렇기에 병렬처리 여부는 컨텍스트(작업)의 의해 결정된다. 컨텍스트(Context) 컨텍스트는 동시성 환경에서 실행 중인 프로세스나 스레드, 혹..
DSeung
'동시성' 태그의 글 목록