Attualmente sto imparando Haskell per divertimento perché ho sempre voluto vedere come progetti i programmi in un senso non orientato agli oggetti.GC fa una pausa in Haskell per applicazioni soft in tempo reale
Ma sto anche ricercando se è utile utilizzare Haskell per un motore di gioco. La mia preoccupazione principale è il GC.
So che GHC è concomitante e thread locale.
Ho letto che il GC di solito si ferma tra 1ms-5ms. So che è diverso per ogni programma, ma ho ancora bisogno di alcuni numeri per fare alcuni calcoli.
Diciamo che il mio gioco funziona a 60fps
che significa che ogni frame ha bisogno del calcolo 0.016666667s
giusto? Una pausa gc lo aumenterebbe a ~0.017666667
che risulta in 56fps
. Quindi si tratta di una perdita di prestazioni di ~4fps
o 7%
. Per me è un grande successo.
Ora sto contando sul thread locale GC perché voglio che il mio motore di gioco sia altamente concorrente.
Desidero utilizzare il modello di attore per il codice del gioco in modo che ogni entità abbia la propria memoria. Se ho ragione, questo significa che ogni entità ha la propria raccolta rifiuti locale.
Ma il problema principale è ancora il motore di gioco con il suo ciclo principale. Le cadute casuali dei fps del 7% sono piuttosto grandi.
I miei calcoli sono corretti? Qualche consiglio che puoi darmi?
Si presuppone che il gc venga eseguito ad ogni calcolo del frame. Questo è probabilmente sbagliato. – Nicolas
@Nicolas Non presumo che eseguirà ogni frame. Penso che verrà eseguito ad un certo punto e quindi mettere in pausa il thread locale. Ma una pausa di 1 ms risulta a 60 fps in una caduta di 4 fps. Non sono sicuro che quando corre, penso che ci siano alcuni parametri che posso modificare. Spero ancora che mi sbagli. –
No, hai aggiunto 1ms per ogni calcolo del frame. Significa che hai supposto che a * ogni * fotogramma, perdi 1ms a causa del GC. In base al calcolo, il GC viene chiamato 56 volte al secondo e utilizza 1 ms per l'esecuzione. – Nicolas