/*
concurrency가 불리한 경우도 있다
개념
(
concurrency: 계속해서 적절히 switch,
parallelism: 순간을 놓고 봤을 때에도 여러 작업이 병렬적으로 동시에 수행
)
go routine은 concurrency
go routine 개념. 작동 원리?
예제: 고루틴은 필요한 곳에 적절히 사용되어야 한다.
*/
CPU, 코어, 프로그램, 프로세스, 스레드
고루틴: 어플리케이션 레벨에서의 스레드. 고 언어는 코어가 아닌 스레드를 바꿔가며 작업하므로 컨텍스트 스위칭 비용이 없음(하나의 스레드를 여러 고루틴이 돌아가면서 접근함)
코어와 스레드를 직접 대기상태의 고루틴에 할당하는 게 아니고 코어와 스레드를 할당받은 고루틴이 대기상태일떄 그 고루틴을 대기열에 다시 밀어넣고 실행을 기다리는 고루틴을 할당해준다. 이로서 고루틴을 마음껏 만들어 쓸수있다.
concurrency parallelism은 같은 개념이 아니다.
어느 상황에 어떤 개념을 사용해야 하는지 알아야 성능을 악화시키지 않을 수 있다.
기본 개념부터 공부하자
코어: 연산 작업을 수행하는 부분이고, 코어의 갯수가 많을 수록 한번에 할 수 있는 일이 많아진다. (속도가 더 빨라지는 게 아니다. )
내 노트북은 인텔코어 i7인데 코어 개수는 4개고 쓰레드 수는 8개다.. 정확히 무슨말이냐?
인텔에서 하이퍼스레딩 기술을 지원하기 떄문에 이게 가능하다고 한다. 즉 이 기술이 없었다면 i7도 코어 4개, 그리고 각 코어당 스레드 한개밖에 못쓰는데, 이 기술로 코어 하나에 가상의 데이터 처리 스레드를 더 늘려줘서 성능 향상을 유도하는 것이다.
(고속도로의 차선 수 = 코어)
CPU: 중앙처리장치. 연산과 수행, 프로그램 실행하는 컴퓨터의 중요한 부분이다.
데이터를 가져오고, 디코딩하고, 실행한다.