Tôi hiện đang học Haskell vì vui vì tôi luôn muốn xem cách bạn thiết kế chương trình theo nghĩa không định hướng đối tượng.GC tạm dừng trong Haskell cho các ứng dụng thời gian thực mềm
Nhưng tôi cũng nghiên cứu xem có hữu ích khi sử dụng Haskell cho công cụ trò chơi hay không. Mối quan tâm chính của tôi là GC.
Tôi biết rằng GHC là đồng thời và luồng cục bộ.
Tôi đọc rằng GC thường tạm dừng trong khoảng từ 1ms-5ms. Tôi biết rằng nó là khác nhau cho mỗi chương trình, nhưng tôi vẫn cần một số con số để thực hiện một số tính toán.
Giả sử trò chơi của tôi chạy ở 60fps
có nghĩa là mọi khung hình cần 0.016666667s
quyền tính? Việc tạm dừng gc sẽ tăng số này lên ~0.017666667
dẫn đến 56fps
. Do đó, mất hiệu suất là ~4fps
hoặc 7%
. Đối với tôi đó là một hit khá lớn.
Bây giờ tôi đang đếm trên GC địa phương chủ đề vì tôi muốn công cụ trò chơi của tôi được đồng thời cao.
Tôi muốn sử dụng mô hình Diễn viên cho mã trò chơi để mọi thực thể sẽ có bộ nhớ riêng. Nếu tôi đúng, điều này có nghĩa là mọi thực thể đều có bộ sưu tập rác của địa phương.
Nhưng vấn đề chính vẫn là công cụ trò chơi với vòng lặp chính của nó. Ngẫu nhiên fps giảm 7% là khá lớn.
Tính toán của tôi có đúng không? Bạn có thể cho tôi bất kỳ đề xuất nào không?
Bạn giả định rằng gc được chạy ở mỗi phép tính khung. Điều này có lẽ là sai. – Nicolas
@Nicolas Tôi không cho rằng nó sẽ chạy mọi khung hình. Tôi nghĩ rằng nó sẽ chạy tại một số điểm và sau đó tạm dừng thread địa phương của nó. Nhưng tạm dừng 1ms kết quả ở tốc độ 60 khung hình/giây khi giảm 4fps. Tôi không chắc chắn khi nó chạy, tôi nghĩ rằng có một số thông số mà tôi có thể tinh chỉnh mặc dù. Tôi vẫn hy vọng rằng tôi sai. –
Không, bạn đã thêm 1ms vào mỗi phép tính khung. Nó có nghĩa là bạn giả định rằng tại * mỗi khung *, bạn mất 1ms do GC. Theo tính toán của bạn, GC được gọi là 56 lần mỗi giây và sử dụng 1ms để chạy. – Nicolas