일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 유한상태머신
- 유니티
- ObjectPool
- LINQ
- invokec#events
- soundmanager
- 코루틴
- 비선형자료구조
- skybox
- c#
- 스파르타내일배움캠프
- 배열
- InputManager
- inputsystem
- Generic
- 인터페이스
- FSM
- UI
- 스택
- BGM
- script
- 메서드
- 직렬화
- 람다식
- unity
- 효과음
- delegate
- 자료구조
- 장애물달리기
- 프로그래머스
- Today
- Total
Unity 개발일지
[Unity] 멀티스레드(Thread) & GPU 본문
[프로세스와 스레드의 차이는 무엇일까?]
프로세스를 이해하기 위해서는 일단 프로그램이 무엇인지 알아야 한다.
프로그램은 윈도우의 exe 파일이나 맥의 dmg 파일과 같은 컴퓨터에서 실행할 수 있는 파일을 통칭한다.
아직 파일을 실행하지 않은 상태이기 때문에 정적 프로그램(Static Program) 줄여서 Program이라고 부른다.
즉, 프로그램은 쉽게 말해 그냥 코드 덩어리인 것이다.
<프로세스>는 실행 중인 프로그램의 인스턴스로, 각 프로세스는 별도의 메모리 공간을 가지고 독립적으로 실행된다.
프로세스는 프로그램을 실행 시켜 정적인 프로그램이 동적으로 변하여 프로그램이 돌아가고 있는 상태를 말한다. 즉, 컴퓨터에서 작업중인 프로그램을 의미한다.
모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당해 줘야 실행될 수 있다. 그래서 프로그램을 실행하는 순간 파일은 컴퓨터 메모리에 올라가게 되고, 운영체제로부터 시스템 자원(CPU)을 할당받아 프로그램 코드를 실행시켜 우리가 서비스를 이용할 수 있게 되는 것이다.
서로 다른 프로세스는 서로의 메모리에 접근할 수 없으며, 하나의 프로세스가 종료되더라도 다른 프로세스에는 영향을 미치지 않는다.
<프로세스의 한계>
과거에는 프로그램을 실행할 때 프로세스 하나만을 사용해서 이용했다. 하지만, 기술이 발전됨에 따라 프로그램이 복잡해지고, 다채로워짐으로써 프로세스 작업 하나만들 사용해서 프로그램을 실행하기에는 한계가 있었다. 스레드(Thread)는 이러한 프로세스 특성의 한계를 해결하기 위해 탄생했다.
<스레드>는 프로세스 내에서 실행되는 단위로, 하나의 프로세스는 여러 스레드를 가질 수 있으며, 이들 스레드는 동일한 메모리 공간을 공유한다. 따라서 스레드 간의 통신이 비교적 빠르지만, 동기화 문제를 해결해야 한다.
쉽게 말하면, 하나의 프로세스 내에서 동시에 진행되는 작업 갈래, 흐름의 단위를 말한다.
우리는 크롬 브라우저에서 파일을 다운받으며 온라인 쇼핑을 하기도 하며 유튜브를 보기도 한다.
하나의 프로세스 안에서 여러가지 작업들 흐름이 동시에 진행되기 때문에 가능한 것인데, 이러한 일련의 작업 흐름들을 스레드라고 하며 여러개가 있다면 이를 멀티(다중) 스레드라고 부른다.
[Unity에서 Main Thread가 아닌 다른 스레드에서 Transform을 변경할 수 있을까?]
Unity에서는 대부분의 엔진 관련 API(특히 게임 오브젝트의 Transform 변경 등)는 메인 스레드에서만 접근할 수 있다.
메인 스레드가 아닌 다른 스레드에서 이러한 API를 호출하면 예외가 발생할 수 있다.
[왜 모든 작업을 비동기로 처리하지 않을까?]
모든 작업을 비동기로 처리하면 코드의 복잡성이 증가하고, 디버깅과 유지보수가 어려워질 수 있다.
또한 비동기 작업 간의 동기화 문제로 인해 새로운 버그가 발생할 수 있다.
CPU나 메모리 사용이 적은 작업을 굳이 비동기로 처리할 필요는 없다.
[Unity에서 멀티스테딩을 구현하기 위한 방법은?]
C# 스레딩
System.Threading 네임스페이스를 사용하여 직접 스레드를 생성하고 관리할 수 있다.
Task 병렬 라이브러리 (TPL)
System.Threading.Tasks 네임스페이스의 Task 클래스를 사용하여 비동기 작업을 쉽게 관리할 수 있다.
Job System
Unity의 Unity.Jobs 네임스페이스를 사용하여 멀티스레딩 작업을 더 효율적으로 관리할 수 있다.
특히 Burst 컴파일러와 함께 사용하면 성능을 극대화할 수 있다.
Unity's Coroutines
비동기 작업을 메인 스레드에서 처리하는 방법으로, 실제 멀티스레딩은 아니지만 비동기 작업을 쉽게 구현할 수 있다.
[CPU와 GPU의 작동 방법은 어떤 차이가 있을까?]
CPU (Central Processing Unit)
CPU는 컴퓨터의 두뇌로 불리는 중앙 처리 장치로 주요 기능은 컴퓨터의 모든 연산과 작업을 관리하고 조정하는 것이다. 컴퓨터의 주요 명령어를 해석하고 실행하는 역할을 수행하여 사용자와 시스템이 원활하게 상호작용할 수 있도록 합니다.
CPU는 다양한 종류의 작업을 빠르게 처리할 수 있도록 설계되어있다. CPU는 적은 수의 코어를 가지고 있으며, 각 코어는 고속의 클럭 속도로 작동한다. 직렬 처리에 강점이 있으며, 복잡한 연산을 빠르게 수행할 수 있다.
CPU 특징
제어 유닛(Control Unit): 명령어를 해석하고 실행하는 데 필요한 신호 제어
산술 논리 연산 장치(ALU, Arithmetic Logic Unit): 산술 및 논리 연산 수행
캐시 메모리(Cache Memory): CPU 내부에 위치하여 빠른 데이터 접근 지원
스레드(Thread): 하나의 CPU 코어에서 동시에 여러 작업을 처리할 수 있는 스레드 지원
GPU (Graphics Processing Unit)
GPU는 그래픽 처리에 특화된 장치로서, 3D 그래픽 및 영상 처리 작업에 사용된다. 초기에는 그래픽 작업을 위해 개발되었지만, 현대의 GPU는 고성능 병렬 처리 능력을 갖추고 있어 일반적인 병렬 계산 작업에도 사용된다. 고성능 병렬 처리 능력을 갖추고 있기 때문에 비트코인 같은 채굴 연산에 많이 사용된다.
GPU는 대량의 병렬 처리를 위해 설계된 특수 목적 프로세서입니다. 수천 개의 작은 코어를 가지고 있으며, 각 코어는 비교적 낮은 클럭 속도로 작동한다. 그래픽 렌더링뿐만 아니라 병렬 연산이 필요한 작업(예: 딥러닝, 과학 계산 등)에 유리하다. GPU는 많은 데이터를 동시에 처리할 수 있어 병렬 처리에 강점이 있습니다.
GPU 특징
병렬 처리: 많은 코어로 구성되어 동시에 많은 연산을 병렬로 처리
특수 목적: 주로 그래픽 연산을 위해 설계되었지만, GPGPU(General - Purpose computing on Graphics Processing Units) 기술을 통해 일반적인 계산에도 사용
메모리 계층: CPU보다 큰 메모리를 가지며, 각 코어 당 작은 캐시 메모리를 갖고 있어 대규모 데이터 처리에 유리
[CPU와 GPU의 차이]
기능 및 용도
CPU는 일반적인 계산, 시스템 작업, 사용자 인터페이스 등 다양한 작업을 처리하는 데 사용
GPU는 그래픽 렌더링, 게임, 영상 편집, 인공지능, 데이터 마이닝 등 병렬 처리가 중요한 작업에 특화
코어의 구조
CPU는 몇 개의 코어(주로 2개~16개)를 가짐
GPU는 수백 개에서 수천 개의 코어를 가지며, 이는 대량의 데이터를 동시에 처리하는 데 유리
처리 방식
CPU는 순차적으로 작업을 처리하며, 각 코어가 하나의 작업을 순서대로 수행GPU는 병렬 처리를 통해 많은 작업을 동시에 처리하며, 단일 작업을 여러 코어가 분담
속도와 성능
CPU는 단일 코어 당 높은 성능GPU는 대량의 코어가 병렬 처리를 지원하여 대규모 데이터 처리에 뛰어난 성능을 보임
전력 소비
CPU는 전력 소비가 적으며, 에너지 효율적임GPU는 많은 코어로 인해 전력 소비가 높을 수 있음
[출처]
'Unity 개발' 카테고리의 다른 글
[Unity] Behaviour Tree 이론편 (0) | 2024.07.29 |
---|---|
[Unity] 네트워크 이론 (0) | 2024.07.24 |
[Unity] Json과 직렬화 실습하기 (0) | 2024.07.22 |
[Unity] 최적화 실습하기 (1) | 2024.07.17 |
[Unity] 코루틴(Coroutine) 실습하기 (수정필요) (1) | 2024.07.16 |