의문

<aside> 💡 (나머지 조건이 같다면) single thread를 사용하는 프로그램에 비해 multi-thread가 처리 시간이 반이나 줄어들 수 있나?

</aside>

제가 이해하고 있는 single thread와 multi thread 입니다.

  1. single thread 만 사용한다면 process가 blocking 상태일 때 다른 작업을 수행 할 수 없다.
  1. multi -thread 는 프로세스 내부의 한 스레드에서 다른 쓰레드에서의 실행을 명령하면, 다른 쓰레드가 작업 수행

cf) goroutine

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)
}

제가 위 코드를 파악하기로는

다시 제가 가졌던 의문으로 돌아오면,

<aside> 💡 (싱글, 멀티 스레드 코드가 동일한 비동기 처리 방식과, cpu 갯수를 사용한다면) multi-thread 코드가 처리 시간이 반이나 줄어들 수 있나?

</aside>

왜냐하면

  1. goroutineevent loop 와 비슷한 역할(비동기 처리)를 한다면, go func 함수의 비동기 처리는 goroutine 에서 진행되기 때문에 thread 갯수가 총 처리시간에 크게 영향을 주지 않을 것 같다.