내일배움캠프 68일차 TIL - 멀티스레드 & GPU

권태하·2024년 7월 23일
0
post-thumbnail
post-custom-banner

확인 문제

1. 프로세스와 스레드의 차이는 무엇인가요?

내 답:
• 프로세스: 실행 중인 프로그램의 인스턴스입니다. 각 프로세스는 독립된 메모리 공간(코드, 데이터, 힙, 스택 등)을 가지며, 다른 프로세스와는 독립적으로 실행됩니다. 프로세스 간 통신(IPC)을 통해 데이터를 교환할 수 있습니다.
• 스레드: 프로세스 내에서 실행되는 실행의 흐름입니다. 모든 프로세스는 최소 하나의 스레드(메인 스레드)를 가지며, 추가적으로 더 많은 스레드를 생성할 수 있습니다. 스레드는 프로세스 내의 자원과 메모리를 공유하므로, 효율적인 자원 사용과 빠른 통신이 가능하지만, 동시성 문제를 주의해야 합니다.

모범 답:

2. Unity에서 Main Thread가 아닌 다른 스레드에서 Transform을 변경할 수 있을까요?

내 답:
Unity에서는 Main Thread가 아닌 다른 스레드에서 Transform을 직접 변경할 수 없습니다. Unity의 대부분의 엔진 API와 게임 오브젝트의 컴포넌트는 메인 스레드에서만 안전하게 접근하고 수정할 수 있도록 설계되어 있습니다. 이는 Unity의 렌더링 시스템, 물리 엔진, 그리고 다른 많은 시스템이 메인 스레드에서 실행되기 때문입니다.

모범 답:

3. 왜 모든 작업을 비동기로 처리하지 않는 걸까요?

내 답:
비동기 처리는 많은 장점을 가지고 있지만, 모든 상황에 적합한 것은 아닙니다. 비동기 처리를 사용하지 않는 이유는 다음과 같습니다:

• 복잡성: 비동기 코드는 동기 코드보다 복잡하고, 디버깅이 어렵습니다. 코드의 흐름을 추적하기 어렵고, 예외 처리가 더 복잡해질 수 있습니다.
• 오버헤드: 비동기 작업은 추가적인 오버헤드를 발생시킵니다. 작업을 스케줄링하고, 완료 상태를 관리하며, 결과를 반환하는 데 추가적인 자원이 필요합니다.
• 동시성 문제: 비동기 작업은 동시성 문제를 야기할 수 있습니다. 공유 자원에 대한 접근을 동기화해야 하며, 데이터 레이스나 데드락 같은 문제에 주의해야 합니다.
• 적합하지 않은 작업: 모든 작업이 비동기로 처리될 필요가 없습니다. 예를 들어, 간단한 계산이나 빠르게 완료되는 작업은 동기적으로 처리하는 것이 더 효율적일 수 있습니다.

따라서, 비동기 처리는 필요할 때와 적절한 상황에서 사용하는 것이 중요합니다. 리소스를 효율적으로 사용하고, 애플리케이션의 반응성을 향상시키는 등의 이점을 고려하여 적절히 선택해야 합니다.

모범 답:

설명 문제

1. Unity에서 멀티스레딩을 구현하기 위한 방법에 대해 설명해주세요.

내 답:
• System.Threading 네임스페이스 사용: .NET의 System.Threading 네임스페이스에 있는 Thread 클래스를 사용하여 새로운 스레드를 생성하고 시작할 수 있습니다. 이 방법을 사용하면, 별도의 스레드에서 복잡한 계산이나 데이터 처리 작업을 수행할 수 있습니다. 하지만 Unity의 메인 스레드에서만 호출할 수 있는 API에 접근하려고 할 때는 주의가 필요합니다.
• Task Parallel Library (TPL) 사용: .NET 4.6 이상에서는 System.Threading.Tasks 네임스페이스의 Task를 사용하여 비동기 작업을 쉽게 처리할 수 있습니다. Task.Run()을 사용하면 백그라운드 스레드에서 작업을 실행할 수 있으며, Unity 2017 이상에서 사용할 수 있습니다.
• Unity Job System: Unity 2018.1 이상에서는 Unity Job System을 사용하여 멀티스레딩을 구현할 수 있습니다. 이 시스템은 데이터 병렬 처리와 멀티스레딩을 위해 설계되었으며, Unity의 메인 스레드와는 독립적으로 작업을 수행할 수 있도록 해줍니다. Unity Job System은 고성능 멀티스레딩 작업에 최적화되어 있으며, 메모리 할당과 동기화 문제를 최소화합니다.

모범 답:

2. CPU와 GPU의 작동 방법은 어떤 차이가 있는지 설명해주세요.

내 답:
CPU (Central Processing Unit)

• CPU는 범용 처리 장치로, 다양한 종류의 계산을 처리할 수 있습니다.
• 몇 개의 코어를 가지고 있으며, 각 코어는 한 번에 하나의 작업을 처리할 수 있습니다.
• 복잡한 로직 처리, 분기, 데이터 관리 등 다양한 작업에 적합합니다.
• 순차적인 작업 처리에 최적화되어 있습니다.

GPU (Graphics Processing Unit)

• GPU는 병렬 처리 장치로, 동시에 많은 양의 계산을 처리할 수 있습니다.
• 수천 개의 작은 코어를 가지고 있으며, 각 코어는 간단한 계산을 동시에 수행할 수 있습니다.
• 이미지와 비디오 처리, 렌더링, 과학적 계산 등 병렬 처리가 필요한 작업에 적합합니다.
• 대량의 데이터를 동시에 처리하는 데 최적화되어 있습니다.

CPU와 GPU의 주요 차이점은 처리 방식과 구조에 있습니다. CPU는 복잡한 계산과 다양한 종류의 작업을 처리하는 데 적합한 반면, GPU는 동시에 많은 양의 간단한 계산을 처리하는 데 특화되어 있습니다. 이러한 차이 때문에, 현대의 컴퓨팅 환경에서는 CPU와 GPU가 서로 보완적으로 작동하여, 다양한 종류의 작업을 효율적으로 처리할 수 있습니다.

모범 답:

profile
스터디 로그
post-custom-banner

0개의 댓글