একটি গেম কীভাবে একবারে সমস্ত অক্ষর পরিচালনা করতে পারে?


31

এই প্রশ্নটি কেবল একটি গেম কীভাবে একবারে এতগুলি অক্ষর পরিচালনা করতে পারে সে সম্পর্কে জ্ঞান অর্জন করার জন্য। আমি গেমিংয়ে নতুন তাই আমি আপনার ক্ষমাটি অগ্রিম প্রার্থনা করছি।

উদাহরণ

আমি একটি টাওয়ার প্রতিরক্ষা গেমটি তৈরি করছি যেখানে 15 টাওয়ার স্লট রয়েছে যেখানে টাওয়ারগুলি নির্মিত হয়েছে এবং প্রতিটি টাওয়ার একটি নির্দিষ্ট হারে প্রতিক্ষেপণ করে; আসুন আমরা বলতে পারি যে প্রতি সেকেন্ডে প্রতিটি টাওয়ার দ্বারা 2 টি প্রজেক্টিলেল তৈরি করা হয়েছে এবং যুদ্ধের ময়দানে শত্রুরা মিছিল করছে 70 জনকে বলি (প্রতিটি এইচপি, মানা ইত্যাদি 10 টি বৈশিষ্ট্যের সাথে রয়েছে) যা এগুলির চারপাশে যাওয়ার সাথে সাথে পরিবর্তিত হবে যুদ্ধক্ষেত্র)।

সারাংশ

টাওয়ার গণনা =
প্রতি টাওয়ার দ্বারা প্রতি সেকেন্ডে 15 টি প্রজেক্টিলেস তৈরি = 2
প্রতি সেকেন্ডে তৈরি প্রজেক্টিলের মোট সংখ্যা =
যুদ্ধক্ষেত্রের গণনায় 30 ইউনিট = 70

এখন, খেলা ঐ হ্যান্ডেল করে 30 প্রজেক্টেআইল এবং 70 ইউনিট তাদের হ্যান্ডলিং দ্বারা 100 বিভিন্ন থ্রেড (যা একটি পিসির জন্য খুব বেশী হয়) অথবা 1 থ্রেড যে তাদের সব প্যাচসমূহ, তাদের মান, ইত্যাদি কমিয়ে দেয় (ধীর ধরনের হতে হবে, যা , আমি মনে করি)?

আমার এ সম্পর্কে কোনও ধারণা নেই তাই যে কেউ কীভাবে এটি কাজ করবে সে সম্পর্কে আমাকে গাইড করতে পারে?


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
মাইকেলহাউস

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

উত্তর:


77

এখন গেমটি কীভাবে 30 টি প্রজেক্টাইল এবং 70 ইউনিটকে 100 টি বিভিন্ন থ্রেডে পরিচালনা করে তা পরিচালনা করে

না, কখনই না। সংস্থান প্রতি নতুন থ্রেড কখনই তৈরি করবেন না, এটি নেটওয়ার্কিংয়ে স্কেল করে না, সত্তা আপডেট করার ক্ষেত্রেও তা করে না। (জাভাতে প্রতি সকেট পড়ার জন্য যখন আপনার কাছে একটি থ্রেড ছিল তখন কারও মনে আছে?)

1 টি থ্রেড যা তাদের সকলকে সরিয়ে দেয় তাদের মান ইত্যাদি হ্রাস করে?

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

(যা আমি মনে করি ধীর ধরণের হবে)

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


34
অর্ধেক মাইক্রোসেকেন্ডের মতো, যদি আপনি অদ্ভুত কিছু না করেন। তবে সবচেয়ে বড় কথা, একাধিক থ্রেডের উপর কাজটি বিভক্ত করা সবকিছুকে আরও খারাপ করতে চলেছে , আরও ভাল নয়। মাল্টিথ্রেডিং চূড়ান্ত বলে উল্লেখ করার দরকার নেই ।
লুয়ান

13
+1 বেশিরভাগ আধুনিক গেম ইঞ্জিনগুলি রিয়েল টাইমে হাজার বা এমনকি কয়েক হাজার বহুভুজকে রেন্ডার করে যা স্মৃতিতে নিখরচায় 100 টি বস্তুর গতিবিধি অনুসরণ করার চেয়ে অনেক বেশি নিবিড়।
ফায়ারফক্স

1
"টাওয়ার প্রতিরক্ষা গেমের মতো একটি সাধারণ খেলা" " হুম ... আপনি কি কখনও ডিফেন্স গ্রিড খেলেছেন : জাগরণ , না এর সিক্যুয়াল?
ম্যাসন হুইলার 19

4
"রিসোর্স অনুযায়ী কোনও নতুন থ্রেড কখনই তৈরি করবেন না, এটি নেটওয়ার্কিংয়ে স্কেল করে না ..." কিছু অতি স্কেলেবল আর্কিটেকচার ঠিক এইভাবে করেন !
NPSF3000

2
@ বড়ফুআলবিনো: এটি বলার মতো একটি আজব বিষয়। উপলব্ধ কোরগুলির চেয়ে বেশি থ্রেড তৈরির জন্য বৈধ কারণগুলি রয়েছে। এটি অন্য কোনও ডিজাইনের সিদ্ধান্তের মতো জটিলতা / পারফরম্যান্স / ইত্যাদি বাণিজ্য বন্ধ।
ডায়েটারিচ এপ্পি

39

মাল্টিথ্রেডিংয়ের নিয়ম এক নম্বর হ'ল: যদি না আপনি পারফরম্যান্স বা প্রতিক্রিয়াশীলতার জন্য একাধিক সিপিইউ কোরগুলিতে সমান্তরাল হওয়া প্রয়োজন না তা ব্যবহার করবেন না । "X এবং y ব্যবহারকারীদের দৃষ্টিকোণ থেকে একসাথে হওয়া উচিত" প্রয়োজনীয়তা এখনও মাল্টিথ্রেডিং ব্যবহারের পর্যাপ্ত কারণ নয়।

কেন?

মাল্টিথ্রেডিং শক্ত। প্রতিটি থ্রেড কার্যকর হয়ে গেলে আপনার কোনও নিয়ন্ত্রণ থাকবে না যার ফলস্বরূপ সমস্যাগুলি পুনরুত্পাদন করা সমস্ত ধরণের অসম্ভব হতে পারে ("বর্ণের শর্ত")। এটি এড়াতে বিভিন্ন পদ্ধতি রয়েছে (সিঙ্ক্রোনাইজেশন লক, সমালোচনা বিভাগ) তবে এগুলি তাদের নিজস্ব সমস্যার সেট ("ডেডলকস") নিয়ে আসে।

সাধারণত যে গেমগুলিতে এত কম সংখ্যক অবজেক্টের সাথে সামান্য কয়েক শ হিসাবে কাজ হয় (হ্যাঁ, এটি গেম ডেভেলপমেন্টে তেমন কিছু নয়) একটি সাধারণ forলুপ ব্যবহার করে প্রতিটি লজিক-টিক সাধারণত সিরিয়াল পদ্ধতিতে তাদের প্রক্রিয়া করে ।

এমনকি অপেক্ষাকৃত দুর্বল স্মার্টফোন সিপিইউগুলি প্রতি সেকেন্ডে কয়েক বিলিয়ন নির্দেশাবলী সম্পাদন করতে পারে । এর অর্থ এমনকি যখন আপনার সামগ্রীর আপডেট যুক্তি জটিল হয় এবং প্রতি বস্তু এবং টিকের জন্য 1000 নির্দেশাবলী নিয়ে থাকে এবং আপনি প্রতি সেকেন্ডে উদার 100 টিক্সের লক্ষ্য রাখছেন, আপনার কয়েক হাজার বস্তুর জন্য পর্যাপ্ত সিপিইউ ক্ষমতা রয়েছে। হ্যাঁ, এটি হ'ল খামের গণনাটি একটি বৃহত্তর ওভারসিম্প্লিফাইটিভ ব্যাক অফ দি-খাম, কিন্তু এটি আপনাকে একটি ধারণা দেয়।

এছাড়াও, গেম বিকাশের সাধারণ জ্ঞান হ'ল গেম লজিকস খুব কমই একটি গেমের বাধা eck পারফরম্যান্স-সমালোচনামূলক অংশ প্রায় সবসময় গ্রাফিক্স। হ্যাঁ, এমনকি 2 ডি গেমের জন্যও।


1
"মাল্টিথ্রেডিংয়ের নিয়ম এক নম্বর হ'ল: পারফরম্যান্স বা প্রতিক্রিয়াশীলতার জন্য আপনার একাধিক সিপিইউ কোরগুলিতে সমান্তরাল হওয়া প্রয়োজন না হলে এটি ব্যবহার করবেন না" " গেম বিকাশের ক্ষেত্রে সত্য হতে পারে (তবে আমি এটিতে সন্দেহও করি)। রিয়েল টাইম সিস্টেমগুলির সাথে কাজ করার সময় থ্রেড যুক্ত করার প্রাথমিক কারণ হ'ল সময়সীমা পূরণ করা এবং যৌক্তিক সরলতার জন্য।
স্যাম

6
রিয়েল-টাইম সিস্টেমগুলিতে @ সামের সাক্ষাত্কারের সময়সীমা এমন একটি বিষয় যেখানে প্রতিক্রিয়া জানাতে আপনার মাল্টিথ্রেডিং দরকার। এমনকি থ্রেডিংয়ের মাধ্যমে আপনি যে যুক্তিসঙ্গত সরলতা আপাতদৃষ্টিতে পৌঁছাতে পারেন তা প্রায়শই বিশ্বাসঘাতক, কারণ এটি অচলাবস্থা, বর্ণের পরিস্থিতি এবং সংস্থান অনাহার আকারে লুকানো জটিলতা তৈরি করে।
ফিলিপ

দুর্ভাগ্যক্রমে, অনেক সময় আমি গেমের লজিক বোগ দেখেছি পুরো গেমটি ডাউন করে দিলে যদি পাথফাইন্ডিংয়ের সমস্যা হয়।
লরেন পেচটেল

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

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

26

অন্যান্য উত্তরগুলি আধুনিক কম্পিউটারগুলির থ্রেডিং এবং শক্তি পরিচালনা করেছে। যদিও বড় প্রশ্নটির সমাধান করার জন্য, আপনি এখানে যা করার চেষ্টা করছেন তা হ'ল "এন স্কোয়ারড" পরিস্থিতি এড়ানো।

উদাহরণস্বরূপ যদি আপনার 1000 প্রজেক্টিগল এবং 1000 শত্রু থাকে তবে নিষ্পাপ সমাধানটি কেবল একে অপরের বিপরীতে পরীক্ষা করা।

এর অর্থ আপনি পি * ই = 1,000 * 1,000 = 1,000,000 বিভিন্ন চেক দিয়ে শেষ করেছেন! এটি ও (এন ^ 2)।

অন্যদিকে আপনি যদি আপনার ডেটা আরও ভালভাবে সাজান তবে আপনি সেগুলি এড়াতে পারবেন।

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

সেই সংস্থার কারণে আপনার ডেটা সংগঠিত করা এবং দক্ষতার সাথে এটি প্রক্রিয়াজাতকরণের বিষয়ে চিন্তা করা আপনার পক্ষে করা সর্বকালের বৃহত্তম একক অপ্টিমাইজেশন।


1
কেবল কয়েকটি উপাদান ট্র্যাক করার জন্য পুরো গ্রিডটি মেমোরিতে সংরক্ষণের বিকল্প হিসাবে, আপনি সংঘর্ষের জন্য সম্ভাব্য প্রার্থীদের দ্বারা দ্রুত অনুসন্ধান করার জন্য প্রতিটি অক্ষের জন্য একটি করে বি-ট্রি ব্যবহার করতে পারেন, কিছু ইঞ্জিন এমনকি আপনার জন্য "স্বয়ংক্রিয়ভাবে এটি করে" "; আপনি হিট অঞ্চলগুলি নির্দিষ্ট করেছেন এবং সংঘর্ষের একটি তালিকা চেয়েছেন এবং পাঠাগারটি এটি আপনাকে দেয়। এটি বিকাশকারীদের স্ক্র্যাচ থেকে লেখার পরিবর্তে ইঞ্জিন ব্যবহার করা উচিত এমন অনেক কারণগুলির মধ্যে একটি (যখন সম্ভব তখন অবশ্যই)।
ফায়ারফক্স 21

@ ফাইরফক্স অবশ্যই, এটি করার বিভিন্ন উপায় রয়েছে - আপনার ব্যবহারের ক্ষেত্রে যা আরও ভাল তা নির্ভর করে যথেষ্ট পরিমাণে পরিবর্তিত হবে।
টিম বি

17

উত্স / অবজেক্ট প্রতি থ্রেড তৈরি করবেন না তবে আপনার প্রোগ্রামের লজিকের প্রতি বিভাগে। উদাহরণ স্বরূপ:

  1. ইউনিট এবং প্রজেক্টিলগুলি আপডেট করার জন্য থ্রেড - লজিক থ্রেড
  2. স্ক্রিনটি রেন্ডারিংয়ের জন্য থ্রেড - জিইউআই থ্রেড
  3. নেটওয়ার্কের জন্য থ্রেড (যেমন। মাল্টিপ্লেয়ার) - আইও থ্রেড

এর সুবিধাটি হ'ল আপনার যুক্তি ধীরে ধীরে ধীরে ধীরে আপনার জিইউআই (উদাহরণস্বরূপ বোতাম) আটকে যায় না। ব্যবহারকারী এখনও গেমটি বিরতি এবং সংরক্ষণ করতে পারে। আপনার গেমটি মাল্টিপ্লেয়ারের জন্য প্রস্তুত করার পক্ষেও ভাল, এখন আপনি গ্রাফিকটিকে যুক্তি থেকে আলাদা করেন।


1
একটি শিক্ষানবিসের জন্য আমি পৃথক গ্রাফিক এবং যুক্তিযুক্ত থ্রেড ব্যবহার করার পরামর্শ দেব না, যেহেতু আপনি প্রয়োজনীয় ডেটা অনুলিপি না করে, গেমের স্থিতি দেওয়ার জন্য গেমের রাজ্যে পড়ার অ্যাক্সেসের প্রয়োজন হয়, তাই আপনি এটি আঁকার সময় গেমের অবস্থা পরিবর্তন করতে পারবেন না।
কোডসইনচাওস

1
খুব ঘন ঘন অঙ্কন করা হয় না (যেমন প্রতি সেকেন্ডে 50 বারের বেশি) খুব গুরুত্বপূর্ণ এবং এই প্রশ্নটি পারফরম্যান্স সম্পর্কে। বাস্তব পারফরম্যান্স সুবিধার জন্য ডিভিডিং প্রোগ্রাম হ'ল সহজ কাজ। সত্য এটি এর জন্য থ্রেড সম্পর্কে কিছু জ্ঞান প্রয়োজন, তবে সেই জ্ঞান অর্জন করা সার্থক।
টোমা জ্যাটো - মনিকা

প্রোগ্রামারকে একাধিক থ্রেডে বিভক্ত করা এক ধরণের শক্ত কাজ। বেশিরভাগ বিরক্তিকর বাগগুলি মাল্টি-থ্রেডিং থেকে শুরু করে এবং এটি একটি বিশাল পরিমাণ ঝামেলা এবং বেশিরভাগ সময় এটির পক্ষে মূল্যহীন না - প্রথম নিয়ম: আপনার কোনও পারফরম্যান্স সমস্যা আছে কিনা তা পরীক্ষা করুন, তারপরে অনুকূলিত করুন। এবং যেখানেই বাধা রয়েছে ঠিক সেখানে অনুকূলিত করুন। নির্দিষ্ট জটিল অ্যালগরিদমের জন্য একটি একক বাহ্যিক থ্রেড হতে পারে। তবে তারপরেও আপনাকে ভাবতে হবে যে এই অ্যালগরিদমটি শেষ হতে 3 সেকেন্ড সময় লাগলে আপনার গেমের যুক্তি কীভাবে এগিয়ে যাবে ...
ফ্যালকো

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

4

এমনকি স্পেস হানাদাররা কয়েক ডজন ইন্টারেক্টিভ অবজেক্ট পরিচালনা করেছিল। যেখানে এইচডি এইচ 264 ভিডিওর একটি ফ্রেম ডিকোডিংয়ে কয়েক মিলিয়ন পাটিগণিত অপারেশন জড়িত। আপনার কাছে প্রচুর প্রক্রিয়াকরণ শক্তি উপলব্ধ।

এটি বলেছিল, আপনি যদি এটি অপচয় করেন তবে আপনি এখনও এটি ধীর করতে পারেন। সমস্যা সংঘটন পরীক্ষাগুলির সংখ্যার সংখ্যা এতটা নয়; একে অপরের বিরুদ্ধে প্রতিটি বস্তু যাচাইয়ের সহজ পদ্ধতির প্রয়োজনীয় গণনার সংখ্যা স্কোয়ার করে। এইভাবে সংঘর্ষের জন্য 1001 বস্তুর পরীক্ষার জন্য এক মিলিয়ন তুলনা প্রয়োজন require প্রায়শই এটি সম্বোধন করা হয় যেমন একে অপরের সাথে সংঘর্ষের জন্য অনুমানগুলি পরীক্ষা না করা।


2
আমি নিশ্চিত নই যে স্পেস হানাদাররা সেরা তুলনা করা। শত্রুদের হত্যা করার সাথে সাথে এটি ধীরে ধীরে শুরু হওয়ার এবং গতি বাড়ানোর কারণ নয় কারণ এটি সেভাবে ডিজাইন করা হয়েছিল, তবে কারণ হার্ডওয়্যার সেই সাথে অনেক শত্রুকে একসাথে উপস্থাপন করতে পারে না। en.wikedia.org/wiki/Space_Ivveda#Hardware
মাইক কেলোগ

কী, প্রতিটি বস্তু এমন সমস্ত অবজেক্টের একটি তালিকা বজায় রাখে যা যথেষ্ট পরিমাণে কাছে থাকে যাতে এটি পরের সেকেন্ডে তাদের সাথে সংঘটিত হতে পারে, দ্বিতীয়বার আপডেট হয় বা প্রতিবার তারা যখন দিক পরিবর্তন করে?
র্যান্ডম 832

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

3

আমি এখানে অন্যান্য উত্তরগুলির সাথে কিছুতেই একমত নই। পৃথক যুক্তিযুক্ত থ্রেডগুলি কেবল একটি ভাল ধারণা নয়, তবে প্রক্রিয়াজাতকরণের গতির পক্ষে অত্যন্ত উপকারী - যদি আপনার যুক্তি সহজেই পৃথকযোগ্য হয়

আপনার প্রশ্নটি যুক্তির একটি ভাল উদাহরণ যা সম্ভবত এটি পৃথকযোগ্য যদি আপনি এর উপরে কিছু অতিরিক্ত যুক্তি যুক্ত করতে পারেন। উদাহরণস্বরূপ, আপনি স্থানের নির্দিষ্ট অঞ্চলে থ্রেডগুলি লক করে বা জড়িত জিনিসগুলিকে নিঃশব্দ করে বেশ কয়েকটি হিট সনাক্তকরণ থ্রেড চালাতে পারেন।

প্রতিটি সম্ভাব্য সংঘর্ষের জন্য আপনি সম্ভবত একটি থ্রেড চাইবেন না, কারণ এটি শিডিয়ুলারকে ঘায়েল করতে পারে; থ্রেড তৈরি এবং ধ্বংসের সাথে সম্পর্কিত একটি ব্যয়ও রয়েছে। সিস্টেমের কোরগুলির চারপাশে কয়েকটি থ্রেড তৈরি করা ভাল (বা পুরানোগুলির মতো একটি মেট্রিক #cores * 2 + 4ব্যবহার করুন), তবে তাদের প্রক্রিয়া শেষ হলে এগুলি পুনরায় ব্যবহার করুন।

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

বেশিরভাগ গেমগুলি কেবল এগুলি করে না কারণ এটি গড় গেম ডেভেলপার যে স্থানে সাধারণত বাধা নয় তা হ্যান্ডেল করতে ইচ্ছুক / সক্ষম হওয়ায় এটি আরও জটিল। গেমের বিস্তৃত অংশটি জিপিইউ-সীমিত, সিপিইউ-সীমিত নয়। সিপিইউ গতির উন্নতি সামগ্রিকভাবে সহায়তা করতে পারে, তবে এটি সাধারণত ফোকাস হয় না।

এটি বলেছিল, পদার্থবিজ্ঞানের ইঞ্জিনগুলি প্রায়শই একাধিক থ্রেড নিয়োগ করে এবং আমি বেশ কয়েকটি গেমের নাম দিতে পারি বলে আমি মনে করি যে এটি একাধিক লজিক থ্রেড (HOI3 এর মতো প্যারাডক্স আরটিএস গেমস এবং উদাহরণস্বরূপ) উপকার পেয়েছিল।

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


2

আমি মনে করি যে অন্যান্য উত্তরগুলি প্রশ্নের থ্রেডিং অংশটিতে খুব বেশি মনোযোগ দিয়ে প্রশ্নের একটি গুরুত্বপূর্ণ অংশ মিস করে।

একটি কম্পিউটার একসাথে একবারে সমস্ত বস্তু পরিচালনা করে না। এটি ক্রমানুসারে তাদের পরিচালনা করে।

একটি কম্পিউটার গেমটি বিচ্ছিন্ন সময়-পদক্ষেপে অগ্রসর হয়। গেম এবং পিসির গতির উপর নির্ভর করে এই পদক্ষেপগুলি সাধারণত প্রতি সেকেন্ডে 30 বা 60 ধাপে হয়, বা পিসি যতগুলি / কয়েকটি পদক্ষেপ গণনা করতে পারে।

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

গড়ে সিপিইউ 2 গিগাহার্টজ বা তাত্ক্ষণিক হওয়া উচিত, তার অর্থ প্রতি সেকেন্ডে 10 9 ঘড়ি চক্র। আমরা প্রতি সেকেন্ডে 60 timesteps, যে পাতার 10 নিরূপণ যদি 9 সময় প্রতি / 60 ঘড়ি চক্র = 16.666.666 ঘড়ি চক্র ধাপ। 70 ইউনিট সহ, আমাদের এখনও প্রতি ইউনিটে প্রায় 2,400,000 ক্লকচক্র রয়েছে। যদি আমাদের অপ্টিমাইজ করতে হয় তবে আমরা গেম যুক্তির জটিলতার উপর নির্ভর করে প্রতিটি ইউনিটকে 240 চক্রের মতো সামান্য আপডেট করতে সক্ষম হতে পারি। আপনি দেখতে পাচ্ছেন, আমাদের কম্পিউটারটি এই কাজের জন্য হওয়া প্রয়োজনের চেয়ে প্রায় 10,000 গুণ বেশি গতিযুক্ত।


0

দাবি অস্বীকার: আমার সর্বকালের প্রিয় ধরণের গেমটি পাঠ্য-ভিত্তিক এবং আমি এটি পুরানো এমডির দীর্ঘ সময়ের প্রোগ্রামার হিসাবে লিখি।

আমি নিজেকে একটি গুরুত্বপূর্ণ প্রশ্ন নিজেকে জিজ্ঞাসা করা উচিত মনে হয়: এটি এমনকি আপনি থ্রেড প্রয়োজন? আমি বুঝতে পারি যে কোনও গ্রাফিকাল গেমের সম্ভবত এমটি ব্যবহার করা বেশি তবে আমি মনে করি এটি গেমটির মেকানিক্সের উপরও নির্ভর করে। (জিপিইউ, সিপিইউ এবং আমাদের কাছে থাকা অন্যান্য সংস্থানগুলির সাথে এটি আজও বিবেচ্য। এটি কীভাবে আপনি 'একবারে সমস্ত অক্ষর' সংজ্ঞা দেন তার উপরও নির্ভর করে। আপনি ঠিক একই সময়ে মানে? পিটার যেমনটি যথাযথভাবে তুলে ধরেছেন তেমনটি আপনার কাছে থাকবে না যে সমস্ত একবারে আক্ষরিক অর্থে অপ্রাসঙ্গিক; এটি কেবল এইভাবে উপস্থিত হয়।

ধরে নিচ্ছি যে আপনি থ্রেড সহ যাবেন: আপনার অবশ্যই 100 টি থ্রেড বিবেচনা করা উচিত নয় (এবং এটি আপনার সিপিইউর পক্ষে খুব বেশি কিনা তাও আমি intoুকতে যাচ্ছি না; আমি কেবল তার জটিলতা এবং এর ব্যবহারিকতাকেই উল্লেখ করি)।

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

কিছু যুক্তি দেয় যে তারা একমত যে থ্রেডগুলি উপকারী নয় এবং কিছু যুক্তি দেয় যে প্রতিটি বস্তুর থ্রেড থাকা উচিত। তবে (এবং এটি আবার সমস্ত পাঠ্য হলেও আপনি যদি একাধিক থ্রেডের জন্য বিবেচনা করেন তবে আপনার প্রতিটি বস্তুর জন্য এটি প্রয়োজন - এবং হওয়া উচিত নয়) যেমন ফিলিপ পয়েন্ট আউট করে গেমগুলি তালিকাগুলির মধ্য দিয়ে পুনরাবৃত্তি করে। তবে এখনও এটি কেবলমাত্র নয় (যদিও তিনি বুঝতে পেরেছেন যে যদিও তিনি বুঝতে পেরেছেন যে তিনি কেবলমাত্র কয়েকটি অল্প বস্তুর আপনার পরামিতিগুলিতে সাড়া দিচ্ছেন) এত অল্প বস্তুর জন্য। এমইউডিতে আমি একজন প্রোগ্রামার, যার জন্য আমাদের নিম্নলিখিতগুলি রয়েছে (এবং এটি রিয়েল-টাইমে ঘটে যাওয়া সমস্ত ক্রিয়াকলাপ নয় তাই এটিও মনে রাখবেন):

(উদাহরণের সংখ্যা অবশ্যই পৃথক - উচ্চ এবং নিম্ন)

মোবাইলস (এনপিসি অর্থাত্ প্লেয়ারের অক্ষর নয়): 2614; প্রোটোটাইপস: 1360 অবজেক্টস: 4457; প্রোটোটাইপস: 2281 রুম: 7983; প্রোটোটাইপস: 83 83৮83. প্রতিটি ঘরের সাধারণত নিজস্ব উদাহরণ থাকে তবে আমাদের গতিশীল কক্ষগুলিও রয়েছে যা একটি ঘরের মধ্যে ঘর বলতে বোঝায়; বা একটি মোবাইলের মধ্যে কক্ষগুলি যেমন ড্রাগনের পেট; বা অবজেক্টের কক্ষগুলি যেমন আপনি কোনও যাদুতে প্রবেশ করেন)। মনে রাখবেন যে এই গতিশীল কক্ষগুলি বস্তু / ঘর / মোবাইল প্রতি বিদ্যমান যা তাদেরকে সংজ্ঞায়িত করেছে। হ্যাঁ এটি অনেকটা ওয়ার্ল্ড অফ ওয়ারক্রাফ্টের মতো (আমি এটি খেলি না তবে একটি উইন্ডোজ মেশিন থাকাকালীন একটি বন্ধু আমাকে খেলতে পেরেছিল) কিছুক্ষণ বাদে আমাদের কাছে ওয়ারক্রাফট ওয়ার্ল্ডের অস্তিত্বের অনেক আগেই ধারণা ছিল।

স্ক্রিপ্টস: 868 (বর্তমানে) (অদ্ভুতভাবে আমাদের পরিসংখ্যান কমান্ডটি দেখায় না যে আমাদের কাছে কত প্রোটোটাইপ রয়েছে তাই আমি এটি যুক্ত করব)। এগুলির সবগুলি অঞ্চল / অঞ্চলে অনুষ্ঠিত হয় এবং এর মধ্যে আমাদের মধ্যে 103 রয়েছে। আমাদের বিভিন্ন পদ্ধতি রয়েছে যা বিভিন্ন সময়ে proc আমাদের অন্যান্য অনুষ্ঠানও রয়েছে। তারপরে আমরা সকেটগুলিও সংযুক্ত করেছি। মোবাইলগুলি ঘোরাফেরা করে, বিভিন্ন ক্রিয়াকলাপ করে (লড়াই ছাড়াও), খেলোয়াড়দের সাথে ইন্টারঅ্যাকশন করে ইত্যাদি। (সুতরাং অন্যান্য ধরণের সত্তা করুন)।

আমরা কোনও বিলম্ব ছাড়াই কীভাবে এই সমস্ত পরিচালনা করব?

  • সকেট: নির্বাচন করুন (), সারি (ইনপুট, আউটপুট, ইভেন্ট, অন্যান্য জিনিস), বাফার (ইনপুট, আউটপুট, অন্যান্য জিনিস), ইত্যাদি These এগুলি সেকেন্ডে 10 বার পোল করা হয়।

  • অক্ষর, অবজেক্টস, কক্ষ, যুদ্ধ, সবকিছু: সমস্ত বিভিন্ন ডালের কেন্দ্রীয় লুপে।

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

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