मैं वर्तमान में मस्केल के लिए हास्केल सीख रहा हूं क्योंकि मैं हमेशा यह देखना चाहता था कि आप किसी ऑब्जेक्ट उन्मुख अर्थ में प्रोग्राम कैसे डिज़ाइन करते हैं।जीसी नरम वास्तविक समय अनुप्रयोगों के लिए हास्केल में रुकता है
लेकिन मैं यह भी शोध कर रहा हूं कि गेम इंजन के लिए हास्केल का उपयोग करना उपयोगी है या नहीं। मेरी मुख्य चिंता जीसी है।
मुझे पता है कि जीएचसी समवर्ती और थ्रेड स्थानीय है।
मैंने पढ़ा कि जीसी आमतौर पर 1ms-5ms के बीच रुक जाती है। मुझे पता है कि यह हर कार्यक्रम के लिए अलग है, लेकिन फिर भी मुझे कुछ गणना करने के लिए कुछ संख्या चाहिए।
मान लें कि मेरा गेम 60fps
पर चलता है जिसका मतलब है कि प्रत्येक फ्रेम को गणना के 0.016666667s
की आवश्यकता है? एक जीसी पॉज़ इसे ~0.017666667
तक बढ़ा देगा जिसके परिणामस्वरूप 56fps
होगा। तो यह ~4fps
या 7%
का प्रदर्शन नुकसान है। मेरे लिए यह एक बहुत बड़ी हिट है।
अब मैं थ्रेड स्थानीय जीसी पर गिन रहा हूं क्योंकि मैं चाहता हूं कि मेरा गेम इंजन अत्यधिक समवर्ती हो।
मैं गेम कोड के लिए अभिनेता मॉडल का उपयोग करना चाहता हूं ताकि प्रत्येक इकाई की अपनी याददाश्त हो। यदि मैं सही हूं तो इसका मतलब है कि प्रत्येक इकाई के पास इसका स्थानीय कचरा संग्रह होता है।
लेकिन मुख्य समस्या अभी भी इसके मुख्य लूप के साथ गेम इंजन है। यादृच्छिक एफपीएस 7% की बूंदें काफी बड़ी है।
क्या मेरी गणना सही है? कोई सिफारिशें जो आप मुझे दे सकते हैं?
आप मानते हैं कि प्रत्येक फ्रेम गणना पर जीसी चलाया जाता है। यह शायद गलत है। – Nicolas
@ निकोलस मुझे नहीं लगता कि यह हर फ्रेम चलाएगा। मुझे लगता है कि यह किसी बिंदु पर चलेगा और फिर इसे स्थानीय धागा रोक देगा। लेकिन 1 एफपीएस की रोकथाम 4 एफपीएस ड्रॉप में 60 एफपीएस पर होती है। मुझे यकीन नहीं है कि यह कब चलता है, मुझे लगता है कि कुछ पैरामीटर हैं जिन्हें मैं ट्विक कर सकता हूं। मुझे अभी भी उम्मीद है कि मैं गलत हूं। –
नहीं, आपने प्रत्येक फ्रेम गणना में 1ms जोड़ा। इसका मतलब है कि आपने माना है कि * प्रत्येक * फ्रेम पर, आप जीसी के कारण 1ms खो देते हैं। आपकी गणना के अनुसार, जीसी को प्रति सेकंड 56 बार कहा जाता है, और चलाने के लिए 1ms का उपयोग करें। – Nicolas