এমএমও সার্ভারের জন্য গেম লজিক সংজ্ঞায়িত করতে লুয়া স্ক্রিপ্টগুলি ব্যবহার করা সি ++ তে সংকলিতের চেয়ে অনেক ধীর গতিতে হবে?


10

আমি আমার এমএমও সার্ভারের জন্য একটি সত্তা সিস্টেমটি ব্যবহার করছি এবং আমি লুয়া স্ক্রিপ্টগুলি ব্যবহার করে "ক্রিয়াগুলি" এর আচরণটি সংজ্ঞায়নের বিষয়ে ভাবছিলাম। সার্ভারটি সি ++ তে লেখা আছে। আমি সি ++ তে লুয়ার গতি / মেমরির ব্যবহারের সাথে খুব বেশি পরিচিত নই তবে আমি ক্লায়েন্টের জিইউআই স্ক্রিপ্ট করার জন্য এটি ব্যবহার করেছি। সার্ভারে গেম যুক্তি সংজ্ঞায়িত করতে লুয়া ব্যবহার করে পারফরম্যান্সটি অনেকটা কেটে ফেলবে?


সংশ্লিষ্ট প্রশ্ন: gamedev.stackexchange.com/questions/2913/...
Tetrad

উত্তর:


20

টিএল; ডিআর: লুয়ার ওভারহেড থাকে তবে সঠিকভাবে ব্যবহার করা গেলে তা নগণ্য এবং সহজেই প্রশমিত হয়। ভারী গণিত ক্রিয়াকলাপ বা জ্যামিতির রূপান্তর করার জন্য এটি ব্যবহার করবেন না। আপনি সম্ভবত কোনও জিইআইআই স্ক্রিপ্ট করতে কোনও কার্য সম্পাদনের সমস্যা দেখতে পাবেন না।

গেমের স্ক্রিপ্টিং ভাষা হিসাবে লুয়ার অভিনয় সম্পর্কিত আমি কয়েকটি প্রাথমিক মানদণ্ড করেছি এবং এটি খুব খারাপ। লুয়াজিটকে আমার গেম ইঞ্জিনে আবদ্ধ করার জন্য টোলুয়া ++ ব্যবহার করে আমি 2,000 অভিনেতা তৈরি করেছি, প্রতিটি অভিনেতা লুয়া স্ক্রিপ্ট দ্বারা নিয়ন্ত্রিত প্রতিটি গেম লুপ (একটি সময়-ডেল্টা যুক্তি সহ) বলে। অভিনেতাদের অর্ধেকেরই একটি ঝাঁকুনির স্ক্রিপ্ট ছিল এবং বাকি অর্ধেক একরকম এলোমেলো হাঁটাচলা করছেন (এবং ঝাঁক দ্বারা এড়ানো হয়েছিল)।

রেন্ডারিং উপাদানটি বন্ধ করে দেওয়া আমার ওপিটারন 170 (2x2.0GHz, যদিও আমার ইঞ্জিনটি তখন একক থ্রেডযুক্ত ছিল) প্রতি সেকেন্ডে 400 টি টিকের চেয়ে বেশি সময় দিয়েছিল। আমি ধারণা করি যে আমি যদি খনন করে এবং অনুকূলিত হয়ে থাকি তবে সম্ভবত ভারী কিছু কাজকে আবার C ++ এ নিয়ে যেতে পারলে আমি তার থেকে কিছুটা বেশি বাইরে বেরিয়ে আসতে পারতাম। প্রতি সেকেন্ডে ৪০০ বার অভিনেতাকে আপডেট করা এখনও বেশ চিত্তাকর্ষক ছিল এবং তখন আমার প্রত্যাশা ছাড়িয়ে গেছে।

আমি এখন আমার সমস্ত প্রকল্পে লুয়া ব্যবহার করি এবং এটি প্রকৃত গেম কোডের (এআই, জিইউআই লেআউট / যুক্তি, ইভেন্টগুলি / বার্তাগুলি) বেশিরভাগ অংশকে গঠিত। যখন আপনি দ্রুত কিছু পরিবর্তন করতে এবং বাইরে বেরোন, পুনরায় সংকলন এবং পুনরায় পুনরায় পুনরুত্পাদন না করে পরীক্ষা করতে পারেন তখন গেমস তৈরি করা আরও মজাদার। আমি সময়ে সময়ে কিছু কর্মক্ষমতা সংক্রান্ত সমস্যার সমাধান করেছি তবে সেগুলি সি ++ (এবং তারপরে লুয়া থেকে কল করে) আপত্তিজনক কোডটি পুনরায় প্রয়োগ করে সহজেই সমাধান করা হয়।

সামান্য অফ-টপিকের সময়, ইভিই অনলাইনের সার্ভারগুলি স্ট্যাকলেস পাইথনে প্রায় সম্পূর্ণ লিখিত আছে (আমি বিশ্বাস করি তারা তাদের বেশিরভাগ গণিত ক্রিয়াকলাপকে একটি সি ++ লিবকে স্থির করে) যা আমার নিজের ব্যক্তিগত গবেষণার ভিত্তিতে এবং বেশ কয়েকটি উপলব্ধ মাপদণ্ড, লুয়াজিআইটির চেয়ে অনেক কম পারফরম্যান্ট। তারা খুব বেশি সমস্যা ছাড়াই 30k + সমবর্তী খেলোয়াড়দের পরিচালনা করতে পরিচালনা করে। মঞ্জুর, তাদের প্রচুর পরিমাণে প্রচুর পরিমাণে হার্ডওয়্যার রয়েছে, তবে আমি বিশ্বাস করি যে বেশিরভাগ ব্যয়ই তাদের ডাটাবেস ক্লাস্টারে ...

পাঠ্য প্রাচীর জন্য ক্ষমা।


1
দুর্দান্ত উত্তর! এরকম সুস্পষ্ট বিস্তৃত উত্তরের জন্য ক্ষমা চাওয়ার দরকার নেই। আমি মনে করি লুয়াতে সংজ্ঞায়িত উপাদান "ক্রিয়াগুলি" বিকাশ করতে এবং কিছুটা বেঞ্চমার্কিং করতে আমি সময় নেব। ধন্যবাদ!
বারাক্যাটএক্স 2

2
এই ধরণের সিস্টেমে সবচেয়ে বড় আঘাত হ'ল সাধারণত স্ক্রিপ্টগুলি পার্স করা হয়, সুতরাং প্রারম্ভকালে ফ্রন্টলোড নিশ্চিত করে নিন।
কোডরেঞ্জার

এটি একটি ভালো দিক. মুক্তির জন্য প্যাকেজিংয়ের আগে আমি আসলে আমার লুয়া বাইটোকোডে সংকলন করি যা লোডিংয়ের সময়কে আরও কমিয়ে দিতে পারে যদিও আমি কোনও পরিমাপ না করে নিই।
কোডওয়ফল

আমি দ্বিমত পোষণ করি যখন একটি সাধারণ গেম গেম লজিকের ক্ষেত্রে মৃত্যুদন্ড কার্যকর করার সময়টির সামান্য অংশ (রেন্ডারিং একটি জন্তু), কোনও এমএমও সার্ভারে এটি অনেক বড় অংশ, সুতরাং প্রভাবটি আরও অনেক বেশি লক্ষণীয় হয়। আমার কাছে LUAJit এবং C ++ এর অভিজ্ঞতা আছে এবং LUAJit LUA এর তুলনায় যথেষ্ট দ্রুতগতির হলেও এটি এখনও সি ++ এর চেয়ে অনেক ধীর গতির (আপনার কোড সি ++ সঠিকভাবে ধরে)। আমি স্বীকার করি যে LUAJit সহ কর্মপ্রবাহটি দুর্দান্ত esome তবে গতির দিক দিয়ে এটি হিট a আপনি এটি কীভাবে পাকান না কেন, স্ট্রিং লুকআপ, গতিশীল ধরণের এবং আবর্জনা সংগ্রহের টেবিলগুলিতে ভেরিয়েবলগুলি একটি মূল্যে আসে। LUAJit নেট থেকে ধীর। নেট, নফ বলল
কাজ

2

সংক্ষিপ্ত উত্তর: হ্যাঁ, হ্যাঁ এটি হবে।

দীর্ঘ উত্তর: এটি নির্ভর করে কত গেমের যুক্তি, কতটা চালানো হয় এবং এটি কতটা জটিল এবং যদি আপনাকে প্রতিটি খেলোয়াড়ের জন্য এটি চালানো দরকার। এটি যদি খুব সাধারণ হয় এবং খুব বেশি বার বার না করা হয় তবে আপনি এটির সাথে ভাল থাকতে পারেন। তবে বেশিরভাগ ক্ষেত্রে সি ++ এর পরিবর্তে LUA ব্যবহার করা আপনাকে অনেক কম পারফরম্যান্স দেবে এবং খারাপভাবে স্কেল করবে, অবশ্যই ধরে নিবেন যে কোডটি ভালভাবে নকশা করা হয়েছে এবং অনুকূলিত হয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.