openGL 렌더러를 기반으로 게임의 맥락에서 말하기 :
두 개의 스레드가 있다고 가정 해 봅시다.
게임 내 오브젝트에 대한 게임 로직 및 물리 등을 업데이트합니다.
게임 객체의 데이터를 기반으로 각 게임 객체에 대해 openGL 그리기 호출을 만듭니다 (스레드 1이 계속 업데이트 함)
게임의 현재 상태에서 각 게임 객체의 복사본이 두 개가 아닌 한 스레드 2를 그리는 동안 스레드 2를 일시 중지해야합니다. 그렇지 않으면 게임 개체가 해당 개체에 대한 그리기 호출 도중 업데이트됩니다. 바람직하지 않습니다!
그러나 스레드 1에서 스레드 호출을 안전하게 호출하기 위해 스레드 1을 중지하면 멀티 스레딩 / 동시성의 전체 목적이 중단됩니다.
멀티 코어 아키텍처를 사용하여 성능을 향상시킬 수 있도록 수백 또는 수천 또는 동기화 객체 / 울타리를 사용하는 것 외에 다른 방법이 있습니까?
현재 게임 상태에 아직 포함되지 않은 오브젝트의 텍스처로드 및 쉐이더 컴파일에 멀티 스레딩을 계속 사용할 수 있지만 그리기 및 업데이트와 충돌하지 않고 활성 / 표시 가능한 오브젝트에 대해 어떻게해야합니까?
각 게임 개체에서 별도의 동기화 잠금을 사용하면 어떻게됩니까? 이렇게하면 모든 스레드가 전체 업데이트 / 그리기주기가 아닌 하나의 객체 (이상적인 경우)에서만 차단됩니다! 그러나 각 객체를 잠그는 데 얼마나 많은 비용이 듭니까?