좋은 동시성에는 응용 프로그램에서 몇 개의 스레드를 던지고 최상의 결과를 기대하는 것보다 훨씬 많은 것이 필요합니다. 프로그램이 당혹스럽게 병렬 에서 순수 순차 로 진행되는 방법에는 여러 가지가 있습니다 . 주어진 프로그램은 Amdahl의 법칙 을 사용 하여 문제 나 알고리즘의 확장 성을 표현할 수 있습니다 . 당황스럽게 병렬 응용 프로그램에 대한 몇 가지 자격은 다음과 같습니다.
- 공유 상태 없음, 모든 기능은 전달 된 매개 변수에만 의존
- 물리적 장치 (그래픽 카드, 하드 드라이브 등)에 액세스 할 수 없음
다른 자격이 있지만이 두 가지만으로 특히 게임이 여러 코어를 활용한다고 생각하는 것만 큼 쉽지 않은 이유를 이해할 수 있습니다. 우선, 다른 기능이 물리, 운동을 계산하고 인공 지능을 적용하는 등 다양한 기능으로 렌더링 될 월드 모델을 공유해야합니다. 둘째,이 게임 모델의 각 프레임은 그래픽 카드로 화면에 렌더링되어야합니다.
공평하게 말하면, 많은 게임 제작자들은 타사에서 생산 한 게임 엔진을 사용합니다. 시간이 걸렸지 만이 타사 게임 엔진은 이제 예전보다 훨씬 더 평행합니다.
효과적인 동시성을 처리하는 데 더 큰 아키텍처 문제가 있습니다
동시성은 백그라운드에서 작업을 실행하는 것부터 동시성을위한 완전한 아키텍처 지원에 이르기까지 다양한 형태를 취할 수 있습니다. 일부 언어는 다음과 같은 매우 강력한 동시성 기능을 제공합니다. ERLANG 하지만 애플리케이션을 구성하는 방법에 대해 매우 다르게 생각해야합니다.
모든 프로그램이 완전한 멀티 코어 지원의 복잡성을 필요로하는 것은 아닙니다. 이러한 예 중 하나는 세금 소프트웨어 또는 모든 양식 중심 응용 프로그램입니다. 대부분의 시간이 사용자의 작업 수행을 기다리는 데 멀티 스레드 응용 프로그램의 복잡성은 그다지 유용하지 않습니다.
일부 응용 프로그램은 웹 응용 프로그램과 같이 훨씬 난해한 병렬 솔루션에 적합합니다. 이 경우 플랫폼은 당황스럽게 병렬로 시작되며 스레드 경합을 강요하지 않아도됩니다.
결론:
여러 스레드 (따라서 코어)를 사용하지 않아 모든 응용 프로그램이 실제로 손상되는 것은 아닙니다. 그로 인해 상처를 입는 사람들에게는 때로는 계산이 병렬 처리에 익숙하지 않거나 조정하기위한 오버 헤드가 응용 프로그램을보다 취약하게 만듭니다. 불행히도, 병렬 처리는 여전히 잘해야 할만 큼 쉽지 않습니다.