24장

개념 정리

프로그램은 개발자가 작성한 기능을 가진 코드의 묶음이다. 그리고 실행중인 프로그램을 프로세스라고한다. 이 프로세스 안에는 실행 흐름이 있는데, 하나만 있을 수도 있고 여러개가 있을 수도 있다.

이 실행 흐름을 스레드라고 한다.

예를 들어 브라우저는 프로그램이고, 실행중인 브라우저를 프로세스라고 한다. 그리고 브라우저 탭을 여러개 띄워 실행할 때 각 탭에 해당하는 실행 흐름을 스레드라고 생각할 수 있다.

컴퓨터를 사용하면 여러개의 프로그램을 동시에 실행할 수 있다. 이를 멀티태스킹이라고 하는데, 이는 여러개의 스레드를 동시에 실행(엄격히 말하면 동시가 아님)할 수 있기 떄문에 가능하다.

정확히 말하면 각 스레드를 컴퓨터가 옮겨다니명서 작업의 일부를 조금씩 나눠 실행하기 때문에 동시에 실행하는 것처럼 보인다는 것이다.

이떄 작업 전환이 반드시 일어나게 되는데, 컴퓨터는 작업 전환 시 이전에 해왔던 작업이 어디까지 되어있었는지를 기억하고 있어야 한다. 이를 작업의 문맥, context라고 한다. 즉 컴퓨터는 이를 기억하고 있기 떄문에 멀티태스킹이 가능한것이다.

하지만 작업 수가 늘어나게 되면 기억해야 하는 context의 수도 증가하기 때문에 context 스위칭 비용이 증가하게 된다.

코어 수의 2배 이상 스레드가 생성되면 이런 비용이 많이 발생한다.

하지만 go에서는 코어 하나당 스레드(고루틴이라고 부름) 하나만 할당되도록 하여, 이런 스위칭 비용 부담을 줄였다.

(다만, 코어 수보다 고루틴을 더 많이 생성한 경우에는..? 진짜 동시에 실행되긴 힘들겠지.)

go에는 기본 고루틴이 존재한다. 바로 main 함수다.

package main

func main(){
		
}

⇒ main 함수는 기본 go 루틴이다. 기본 go routine 내에서 main함수가 실행되는 것이다.