본문 바로가기

전체 글

(23)
[GO 마스터하기] 09-동시성2 package main import ( "fmt" "os" "strconv" "sync" ) func main() { numGR, _ := strconv.Atoi(os.Args[1]) var waitGroup sync.WaitGroup var i int k := make(map[int]int) k[1] = 12 for i = 0; i < numGR; i++ { waitGroup.Add(1) go func() { defer waitGroup.Done() k[i] = i }() } k[2] = 10 waitGroup.Wait() fmt.Printf("k = %#v\n", k) }Go 스케줄러 스케줄러는 현재 사용할 수 있는 리소스만으로 처리할 수 있는 일의 양을 효율적으로 분산하는 역할을 담당한다. Go 런..
[GO 마스터하기] 09-동시성 1 Go에서는 goroutine과 channel이라는 기능을 통해 동시성을 지원한다. 고루틴은 Go 프로그램에서 독립적으로 실행할 수 있는 최소 단위이다. 채널을 통해 고루틴 끼리 데이터를 효율적으로 데이터를 주고 받을 수 있다. 따라서 채널은 고루틴끼리 통신하기 위한 참조점인셈이다. Go 프로그램에서 실행되는 부분은 모두 고루틴으로 처리한다. 프로세스, 스레드, Goroutine 프로세스란 명령어와 사용자 데이터, 시스템 영역, 그리고 실행 과정에 수집한 다양한 종류의 리소스로 구성된 독립적인 실행 단위다. 반면 프로그램은 이러한 프로세스의 명령어와 사용자 데이터를 초기화하는 데 사용할 명령어와 데이터를 담은 파일이다. 스레드는 프로그램이나 프로세스보다 좀 더 가볍고 작은 실행단위다. 스레드는 프로세스에 ..
[GO 마스터하기] 08-유닉스 시스템콜 본래 Go는 시스템 프로그래밍 언어의 아쉬운 점을 해결하기 위해 개발되었다. 유닉스 프로세스 프로세스란 일종의 실행 환경ㅇ로서, 명령어, 사용자 데이터, 시스템 데이터, 그리고 실행 시간 동안 얻게 되는 다양한 종류의 리소스로 구성된다. 프로그램은 프로세스에 초기화할 명령와 사용자 데이터로 구성된 바이너리 파일이다. 프로세스는 크게 세 종류로 나눌수 있다. 유저 프로세스는 user space에서 실행되며 특수한 접근 구너한을 가지지 않은 경우가 대부분이다. 커널 프로세스는 kernel space에서만 실행되며, 모든 커널 데이터 구조체에 대한 완전한 접근 권한을 가지고 있다. 데몬 프로세스는 사용자 영역에서 실행되는 프로그램으로, 터미널과 상화 작용하지 않고 백그라운드에서 구동된다. flag 패키지 플래..