-
Go 언어에서 Concurrency (동시성) 과 Parallelism (병렬성)Dev 2025. 3. 24. 00:06728x90
🧪 예제 1: Concurrency (동시성) – goroutine 사용
package main import ( "fmt" "time" ) func printSlow(text string) { for i := 0; i < 5; i++ { fmt.Println(text, i) time.Sleep(500 * time.Millisecond) } } func main() { go printSlow("goroutine") // 비동기 실행 printSlow("main") // 메인 스레드 실행 }
🔍 실행 결과 (예상)
main 0 goroutine 0 main 1 goroutine 1 ...
- main() 함수는 printSlow("main")을 실행하면서
- 동시에 printSlow("goroutine")은 goroutine으로 동시 실행됨
- 한 CPU 코어에서 context switching 하면서 동시성처럼 보임
→ 실제로는 빠르게 번갈아 가며 실행하는 concurrent behavior
🧪 예제 2: Parallelism (병렬성) – runtime.GOMAXPROCS
package main import ( "fmt" "runtime" "time" ) func heavyTask(id int) { start := time.Now() for i := 0; i < 1e8; i++ { _ = i * i } fmt.Printf("Task %d finished in %v\n", id, time.Since(start)) } func main() { runtime.GOMAXPROCS(2) // 👈 CPU 코어 2개 사용 설정 go heavyTask(1) go heavyTask(2) time.Sleep(5 * time.Second) // goroutine 완료 대기 }
🔍 실행 결과 (병렬 실행)
Task 1 finished in 2.3s Task 2 finished in 2.4s
- GOMAXPROCS(2) 설정을 통해 Go runtime이 2개의 OS 쓰레드를 사용
- 두 heavyTask goroutine이 실제로 병렬로 실행됨
GOMAXPROCS(1)이면 둘 다 순차 실행돼서 총 4
5초 걸림3초 안에 완료
GOMAXPROCS(2)이면 병렬 실행 → 2핵심 요약
항목동시성 (Concurrency)병렬성 (Parallelism)구현 go func() GOMAXPROCS(n) + goroutine 실행 방식 번갈아 처리 동시에 처리 예제 결과 순서 섞임 (논리적 동시) 작업 속도 빨라짐 (실제 동시) 728x90'Dev' 카테고리의 다른 글
바이브 코딩 (2) 2025.06.20 go 언어에서 deep copy 사용 (0) 2025.03.24 Go 언어 기원 및 설계 철학 (0) 2025.03.20 Go에서 함수와 상수 이름의 시작 규칙 (대문자 vs. 소문자) (0) 2025.03.03 Go 언어의 Goroutine이란? (0) 2025.03.02