C'è un modo per passare Eventi tra Sistemi in un Entity-Component-System multi-thread che realizza i benefici del salvataggio sulle risorse di sistema?
Ho letto un articolo tedesco sul modello di progettazione di Entity-Component-System. In questo articolo, l'autore ha scritto, che sarebbe bene lasciare che i sistemi comunichino tramite Eventi l'uno con l'altro. Quindi, se CollisionSystem attiva un evento CollisionEvent quando è presente un'entità scontrato con un altro SoundSystem può riprodurre un suono.
L'ho implementato con il modello Observer: un EventManager riceve eventi dai sistemi e notifica a tutti i sistemi. Quindi i sistemi possono apparire autonomamente se vogliono reagire a quell'evento.
Usando questo sistema basato su eventi posso risparmiare un sacco di potenza del computer. Un sistema fa qualsiasi cosa se deve fare. L'autore dell'articolo ha anche scritto che, a causa di tale incapsulamento da parte dei sistemi, è possibile inserire ogni sistema nel proprio thread.
Ho cercato di implementare questo comportamento, ma ho notato che se il sistema A lancia un evento e il sistema B reagisce su questo evento perché è un aggiornamento, il metodo viene chiamato da EventManager, l'azione viene chiamata nel thread del sistema A.
L'unica soluzione che mi viene in mente è di avere un loop all'interno di ogni sistema che guarda in una frequenza fissa attraverso una coda di eventi e se trova un evento interessante spara l'azione da solo. In questo modo perderei il mio Pattern di Osservatore e non salverei la potenza del computer.