실행 순서
- 각자의 Start가 전부 끝난 다음에 Update 가 실행되는것이 아니라 각자 알아서 start 끝낸 다음에 Update 실행된다.
컴퓨터 구조
- SSD(가상메모리)에 실행 파일이 저장되이싿.
- 렘으로 실행파일이 보내진다.
- 실행파일 안에는 COde영역, Data(static 저장) 영역, Heap 영역, Satck이 있다.
- CPU로 실행파일이 보내지면 레지스터에서 실행된다.
스레드
- 프로세스보다 작은 단위다
- 프로세스는 메모리 공유가 안되지만, 스레드는 메모리 공유가 가능하다
컨텍스트 스위칭
- 처리되는 시간보다 프로세스 또는 스레드간 교체되는 상황을 말한다.
- 컨텍스트 스위칭 오버헤드 : 처리시간보다 실행시간이 더 긴 상황이다.
- 발생 예시 (5교시 녹음 8분)
- 분할 / 정복 병합 정렬
- 렌더링 파이프라인의 VS
레이스 컨디션 (경쟁상태)
- 프로세스 혹은 스레드가 실행 리소스를 차지하는 과정을 말한다.
- 실행 중 우선순위가 더 급한 실행에 리소스를 뺴앗길 수 있다.
- Mutex (상호배제)
- 리소스를 차지한 실행이 락을 걸어 리소스를 뺴앗기지 않게 한다.
- 하나만 들어갈 수 있다.
- 이걸 임계영역(Critical section)이라고 한다.
- 세마포어
- 한번에 들어갈 수 있는 실행의 카운터를 세서 여러개의 실행이 동시에 들어갈 수 있도록 끝난 실행이 있다면 다른 실행을 들어가게 하는 기능이다.
- 여러개가 동시에 들어간다.
DeadLock
Update
- 키입력이나 매 프레임마다 실행되는 함수들을 넣는다.
- GmaeLogic Thread라고 부른다.
Render
- GameRendering Thread라고 부른다.
구조체
- 구조체는 무조건 초기화는 생성자에서만 가능하다.
- 읽기 전용이다.
- 초기화를 하려면 임시공간에 뭐가 들어갈지 모르기 떄문에 구조체 안의 변수들 전부 접근해서 초기화해줘야한다.
- 다른곳에서 구조체 내부 변수에 값을 준다고 해도 초기화 당시에 임시공간에 저장된 변수에 접근한게 아니므로 에러가 난다.
- 값형식이다.
- 클래스와 선언이 같지만 역할이 다르다.
- A ob = ndw A(10, 20, 30); ⇒ 클래스와 구조체 생성자 선언 및 초기화
- 클래스는 ob에 클래스의 주소를 스택에 저장하고 this로 클래스 내부에 있는것을 가져온다.
- 구조체는 임시공간이 생성되고 변수가 저장된다. (이때까지는 함수도 저장이 안되있다.)
- 스택에 저장된 변수와 함수가 있기때문에 스택의 생성자가 호출되고, 임시공간에 변수에 값을 할당하고 그걸 스택 변수에 복사한다.
- 이건 힙 공간에 저장되지 않는다.
이론 (박싱, 언박싱)
- int a = 10; ⇒ 값 형식 정적 할당 ⇒ 스택 영역에 저장된다.
- 업 캐스팅은 무조건 가능하기에 Object b = a; 가 가능하다. ⇒ 참조형식이다. (힙 공간에 저장)
- 위의 경우를 박싱(Boxing), 반대의 경우를 언박싱(UnBoxing)이라 한다.
- 박싱 : b에 a의 크기만큼 공간을 만들고 스택에 주소를 저장한다. 즉, 값 형식을 참조형식으로 바꾼다.
- 언박싱 : int c = (int)b; 가 있다면 스택에 c의 공간을 만들고 b의 값을 넣는다. 즉, 참조형식을 값형식으로 바꾼다.