728x90

프로그래밍 138

코루틴 조금 더 자세한 내용

이전글은 여기서 참조하시기 바랍니다. https://kyungtaek.tistory.com/90 코루틴 정의 및 LifeCycle에서의 순서 코루틴 IEnumerator 반환 타입과 바디 어딘가에 포함된 yield 반환문으로 선언하는 메소드이다. yield return null 라인은 실행이 일시 정지되고 다음 프레임 에서 다시 시작되는 지점이다. 코루틴을 실행 kyungtaek.tistory.com 코루틴 분석 코루틴은 다른 스크립트 코드와 다르게 실행된다고 합니다. 대부분의 Unity 스크립트 코드는 단일 위치의 성능 트레이스 내, 특정 콜백 호출 아래에 나타나지만 반면, 코루틴의 CPU코드는 항상 트레이스의 두 곳에서 나타난다고 합니다. * 두 곳에서 나타난다는 부분은 아직 이해하지 못했습니다. 코..

코루틴 정의 및 LifeCycle에서의 순서

코루틴 IEnumerator 반환 타입과 바디 어딘가에 포함된 yield 반환문으로 선언하는 메소드이다. yield return null 라인은 실행이 일시 정지되고 다음 프레임 에서 다시 시작되는 지점이다. 코루틴을 실행하려면 StartCoroutine 함수를 사용해야한다. 작업을 다수의 프레임에 분산할 수 있다. Unity에서 코루틴은 실행을 일시 정지하고 제어를 Unity에 반환하지만 중단한 부분에서 다음 프레임을 계속할 수 있는 메서드라고 합니다. 시간의 흐름에 따른 이벤트의 시퀀스나 절차상의 애니메이션을 포함하기 위해 메서드 콜을 사용하고자 하는 상황에서 코루틴을 사용합니다. ** 하지만 코루틴은 스레드가 아니란 점을 명심하자. - 코루틴의 동기 작업은 여전히 메인 스레드에서 실행된다. - 메인..

[Unity] FixedUpdate / Update / LateUpdate 차이

유니티 라이프사이틀 업데이트 순서 - 게임로직, 상호작용, 애니메이션, 카메라 포지션의 트랙을 유지할 때 사용 가능한 몇몇 다른 이벤트가 존재합니다. 일반적인 패턴은 Update 함수에서 대부분의 작업을 수행할 수 있지만, FixedUpdate, LateUpdate도 존재합니다. 1. FixedUpdate() 1) 공식문서를 보면 Update는 한 프레임당 한번 호출이 되는데 FixecUpdate는 종종 더 자주 호출된다고 나와있습니다. 2) 프레임 속도가 낮은 경우에는 프레임당 여러번 호출 될 수 있고, 프레임 속도가 높은 경우에는 프레임 사이에 호출되지 않을 수 있습니다. - FixedUpdate는 프레임과 관계없이 일정한 속도로 호출됨을 알 수 있습니다. 3) 유니프 사이클에서 Physics의 범주..

유니티 생명 주기 (Life Cycle) 알아보기

공식 설명이 가장 정확하므로 아래 내용을 참조 바랍니다. https://docs.unity3d.com/kr/2019.4/Manual/ExecutionOrder.html 이벤트 함수의 실행 순서 - Unity 매뉴얼 Unity 스크립트를 실행하면 사전에 지정한 순서대로 여러 개의 이벤트 함수가 실행됩니다. 이 페이지에서는 이러한 이벤트 함수를 소개하고 실행 시퀀스에 어떻게 포함되는지 설명합니다. docs.unity3d.com 라이프 사이클 큰 흐름 위 공식 Unity 주소에서 읽은 순서를 크게 분류하면 1. Initialization 2. Editor 3. Initialization 4. Physics 5. Input events 6. Game Logic 7. Scene rendering 8. Gizmo ..

명령어 병렬 처리 기법

명령어 파이프라인 - 명령어 인출 (Instruction Fetch) - 명령어 해석 (Instruction Decode) - 명령어 실행 (Execute Instruction) - 결과 저장 (Write Back) * 같은 단계가 겹치지만 않는다면 CPU는 '각 단계를 동시에 실행할 수 있다. 명령어 파이프라이닝은 동시에 여러 개의 명령어를 겹쳐 실행하는 기법이다. 마치 컨베이어 벨트와 비슷하다. 파이프라인 위험 - 명령어 파이프라인이 성능 향상에 실패하는 경우를 말한다. 1. 데이터 위험 2. 제어 위험 3. 구조적 위험 1. 데이터 위험: 명령어간의 의존성 때문에 발생하는 위험이다. - 모든 명령어를 동시에 처리할 수는 없다.(이전 명령어를 끝까지 실행해야만 비로소 실행할 수 있는 경우를 말한다.)..

[백준] 5597번, sort사용법 (c++)

문제 풀이방법 1. 나는 처음 28번까지 입력을 받은 뒤, 정렬을 시킨 후 1번부터 30번까지 하나하나 체크를 해서 배열 위치에 없다면 i를 print하는 방식으로 문제를 해결하려고 했다. 하지만 정렬을 사용하는 방법을 까먹어서 검색하였다. sort함수 - #include 에 포함되어 있다. - 사용방법은 sort(n, n+28) >> 즉 첫번째 값이 시작되는 주소위치, 끝 값의 주소위치를 지정해주면 알아서 오름차순 정렬을 해준다. - sort(begin,end), 범위는 begin > a; n[i] = a; } sort(n,n+28); for(int i = 1; i> a; n[i] = a; } sort(n, n + 28); int j = 0; for(int i = 1; i

CPU의 속도를 빠르게 하는 멀티코어 멀티스레드

CPU의 속도 - 컴퓨터의 부품들은 클럭신호에 마줘 일사불란하게 움직이고 CPU는 명령어 사이클이라는 정해진 흐름에 맞춰 명령어를 실행한다. - 따라서 클럭속도가 빠르다면 명령어 처리속도가 빠르다. - 클럭속도 : HZ(헤르츠) 단위 - 1초에 클럭이 반복되는 횟수를 뜻하며 1초에 100번 반복되면 100Hz이다. - CPU는 클럭신호를 빠르게할때는 빠르게, 느리게 할땐 느리게 유동적인 동작이 가능하다. - 필요 이상으로 클럭을 높이면 발열이 심해지기 때문에 꼭 클럭신호를 빠르게한다고 해서 반드시 빨라지는것만은 아니다. 클럭속도를 늘리는 방법 이외에 CPU의 속도를 빠르게 하기 위한 방법 1. 코어 수를 늘리는 방법 (멀티 코어) 2. 쓰레드 수를 늘리는 방법 (멀티 쓰레드) 코어 / 멀티코어 - 오늘날..

이진탐색 알고리즘

이진탐색 알고리즘 - 순차 탐색 보다 훨씬 좋은 성능을 보인다. - 배열이 정렬되어 있어야 한다는 제약이 따른다. (당연하다. 절반씩 나누어 탐색을 나아가는 알고리즘이기때문에 정렬이 되어있어야 한다.) - 절반씩 나누어 탐색을 나아가는 알고리즘(대소비교를 통해 왼쪽 오른쪽을 찾아나간다.) 포인트는 last에 mid -1을 해주는것과 first에 mid +1을 해주는 것이다. first와 last가 역전될 때까지 탐색을 지속적으로 시켜주기위해서 반드시 필요한 부분이다. 이진 탐색 알고리즘 최악의 경우 시간 복잡도 구해보기 - 시간 복잡도 계산을 위한 핵심 연산은 == 연산자이다! => if(target == ar[mid]) 에서 ==이다. 왜냐하면 여기서 true를 반환하게되면 return mid를 실행하..

명령어 Cycle과 Interrupt(인터럽트)

핵심 명령어는 일반적으로 인출과 실행이 반복된다. 그 중간에 메모리 접근이 더 필요한 경우에는 간접 사이클이 실행되는데 이렇게 반복되는 흐름을 끊어버리고 명령어를 실행할 수 있도록 인터럽트라는 개념이 있다. CPU가 일반적인 사이클로 돌고있다가 먼저 빠르게 처리해야할 다른 작업이 생겼을때 인터럽트가 발생한다. 명령어 사이클 - 프로그램 속 명령어들이 일정한 주기가 반복되며 실행되는것을 말한다. - CPU는 메모리에 있는 값을 CPU의 레지스터 혹은 내부로 인출해온 뒤 실행을 한다. (즉 인출 - 실행 - 인출 - 실행의 반복) - 하지만 주소지정방식이 메모리 접근이 더 필요한 경우에는 명령어를 한번 더 접근해야 하므로 간접 사이클이 실행되는것이다. 인터럽트 1. 종류 1) 동기 인터럽트 (Exceptio..

728x90