현재 작업중 인 C ++ 엔진은 생성 (프로시 저럴 컨텐츠 생성을위한), 게임 플레이 (AI, 스크립트, 시뮬레이션), 물리학 및 렌더링과 같은 여러 개의 큰 스레드로 나뉩니다.
스레드는 스레드에서 스레드로 전달되는 작은 메시지 오브젝트를 통해 서로 통신합니다. 스테핑하기 전에 스레드는 모든 수신 메시지 (변환, 오브젝트 추가 및 제거 등)에 대한 업데이트를 처리합니다. 때때로 하나의 스레드 (Generation)가 무언가 (Art)를 작성하고 영구적으로 소유하기 위해 다른 스레드 (Rendering)로 전달합니다.
프로세스 초기에 몇 가지 사항을 발견했습니다.
메시징 시스템이 번거 롭습니다. 새로운 메시지 타입을 생성한다는 것은 기본 Message 클래스를 서브 클래 싱하고, 해당 타입을위한 새로운 열거 형을 생성하고, 스레드가 새로운 타입의 메시지를 해석하는 방법에 대한 논리를 작성하는 것을 의미합니다. 개발 속도가 빠르며 오타 스타일 오류가 발생하기 쉽습니다. (Sidenote-이 작업을 수행하면 동적 언어가 얼마나 훌륭한 지 알 수 있습니다!)
더 좋은 방법이 있습니까? 이것을 자동으로 만들기 위해 boost :: bind와 같은 것을 사용해야합니까? 내가 그렇게하면, 말을 할 수있는 능력을 잃어 버리거나 종류 나 그 밖의 것에 따라 메시지를 분류하는 것이 걱정됩니다. 그런 종류의 관리가 필요한지 확실하지 않습니다.
첫 번째 요점은 이러한 스레드가 많은 통신을하기 때문에 중요합니다. 메시지 작성 및 전달은 작업을 수행하는 데있어 큰 부분입니다. 그 시스템을 간소화하고 싶지만 다른 유용한 패러다임에도 열려 있습니다. 이것을 쉽게하기 위해 고려해야 할 다른 멀티 스레드 디자인이 있습니까?
예를 들어, 자주 쓰지 않지만 여러 스레드에서 자주 읽는 리소스가 있습니다. 모든 스레드가 액세스 할 수 있도록 뮤텍스로 보호되는 공유 데이터를 가질 수 있다는 생각에 개방적이어야합니까?
멀티 스레딩을 염두에두고 처음부터 무언가를 디자인 한 것은 이번이 처음입니다. 이 초기 단계에서 실제로 그것이 실제로 잘 진행되고 있다고 생각하지만, 확장과 새로운 작업을 구현할 때의 내 효율성에 대해 걱정하고 있습니다.