<aside> 💡 (나머지 조건이 같다면) single thread를 사용하는 프로그램에 비해 multi-thread가 처리 시간이 반이나 줄어들 수 있나?
</aside>
gorounine
사용cf) goroutine
goroutine
은 GO 런타임이 자체 관리한다. 비동기 concurrent 처리를 구현하기 위해 만들어졌다.goroutine
이 만들어져도 1개의 CPU 에서 작업을 시분할하여 처리한다.http://golang.site/go/article/21-Go-루틴-goroutine
func main() {
cpuNumber := 2
runtime.GOMAXPROCS(cpuNumber)
var wait sync.WaitGroup
wait.Add(cpuNumber)
startTime := time.Now()
**// 비동기 !!**
go func() {
for i := 0; i < 100; i++ {
fmt.Println("------------------------ [1] google")
google.Crawler()
}
defer wait.Done()
}()
go func() {
for i := 0; i < 100; i++ {
fmt.Println("------------------------ [2] naver")
naver.Crawler()
}
defer wait.Done()
}()
wait.Wait()
elapsedTime := time.Since(startTime)
fmt.Printf("duration: %s\\n", elapsedTime)
}
crawler
함수는 IO 요청, 비동기로 진행된다. (go
키워드, goroutine
사용)<aside> 💡 (싱글, 멀티 스레드 코드가 동일한 비동기 처리 방식과, cpu 갯수를 사용한다면) multi-thread 코드가 처리 시간이 반이나 줄어들 수 있나?
</aside>
goroutine
이 event loop
와 비슷한 역할(비동기 처리)를 한다면,
go func
함수의 비동기 처리는 goroutine
에서 진행되기 때문에 thread 갯수가 총 처리시간에 크게 영향을 주지 않을 것 같다.