স্টেটচার্ট বনাম মেটা স্টেট মেশিন বুস্ট করুন


142

দৃশ্যত বুস্টে রাষ্ট্র মেশিনগুলির জন্য দুটি পৃথক গ্রন্থাগার রয়েছে: স্টেটচার্ট এবং মেটা স্টেট মেশিন (এমএসএম)। ট্যাগলাইনগুলি খুব অনুরূপ বর্ণনা দেয়:

  • বুস্ট.স্টেটচার্ট - সহজেই পঠনযোগ্য এবং বজায় রাখতে সক্ষম সি ++ কোডে নির্বিচারে জটিল সসীম রাষ্ট্র মেশিনগুলি প্রয়োগ করা যেতে পারে।
  • মেটা স্টেট মেশিন - এক্সপ্রেসিভ ইউএমএল 2 সসীম রাষ্ট্রের মেশিনগুলির জন্য খুব উচ্চ-কার্য সম্পাদনের গ্রন্থাগার।

আপনি কি জানেন যে মূল পার্থক্যগুলি কী এবং উভয়ের মধ্যে চয়ন করার ক্ষেত্রে কী বিবেচনা রয়েছে?



8
: ডি এই প্রশ্নটি আমার এসও অভিজ্ঞতার চূড়া! উভয় বিকাশকারীদের কাছ থেকে উত্তর পাওয়া ... এটি আরও ভাল কিছু পেতে পারে ?! ক্রিস্টোফ এবং আন্দ্রেয়াসকে অনেক ধন্যবাদ।
ফায়ারএফিস

দুর্দান্ত প্রশ্ন এবং আপনি দুটি প্রতিযোগী বিকাশকারীদের উত্তর পেতে সক্ষম হয়েছেন!
অফিড়মো

3
স্টেটচার্ট আপনাকে কনস্ট্রাক্টর এবং ডেস্ট্রাক্টরগুলিতে কার্যকারিতা রাখে। এটি একটি বিরোধী-নিদর্শন, বিশেষত ধ্বংসকারীদের সাথে।
লেভ

2
স্টেটচার্টে, প্রস্থান ক্রিয়াকলাপগুলি পৃথক প্রস্থান () হ্যান্ডলারের মধ্যে রাখা যেতে পারে যা ধ্বংসের আগে ডাকা হয়। আমি মনে করি এই বিধানটি লেভের উল্লিখিত অ্যান্টি-প্যাটার্নের সাথে মূল সমস্যাটি প্রশমিত করে।
টিম ক্রু

উত্তর:


116

যেহেতু অনেক আগ্রহ রয়েছে বলে মনে হয়, দয়া করে আমাকে আমার (স্পষ্টতই পক্ষপাতদুষ্ট) মতামত দেওয়ার অনুমতি দিন, যার ফলে নুনের দানা নেওয়া উচিত:

  • এমএসএম অনেক দ্রুত
  • এমএসএমের কোনও আরটিটিআই বা ভার্চুয়াল কিছু দরকার নেই
  • এমএসএমের আরও একটি সম্পূর্ণ ইউএমএল 2 সমর্থন রয়েছে (উদাহরণস্বরূপ অভ্যন্তরীণ ট্রানজিশন, ইউএমএল-কনফর্ম অরথোগোনাল অঞ্চল)
  • এমএসএম একটি বর্ণনামূলক ভাষা দেয় (আসলে বেশ কয়েকটি)। উদাহরণস্বরূপ, ইইউএমএল ফ্রন্ট-এন্ড ব্যবহার করে একটি স্থানান্তর সোর্স + ইভেন্ট [গার্ড] / অ্যাকশন == লক্ষ্য হিসাবে বর্ণনা করা যেতে পারে
  • এমএসএম আপনার সংকলকটিকে বৃহত্তর স্টেট মেশিনগুলির জন্য ক্ষতিগ্রস্থ করে তুলবে, সুতরাং আপনার খুব সাম্প্রতিক একটি সংকলক (g ++> = 4.x, উপাচার্য> = 9) প্রয়োজন হবে

এমএসএম পর্যালোচনা চলাকালীন পোস্ট করা মন্তব্যগুলি সন্ধান করে আপনি নিজেকে আরও ভাল মতামত তৈরি করতে পারেন। এই বিষয়টি বিকাশকারীদের তালিকায় বেশ আলোচিত হয়েছিল।


2
আপনাকে অনেক ধন্যবাদ. এটি বিকাশকারীর মতামত শুনে আনন্দিত! এখন আমাদের কেবলমাত্র আন্দ্রেস হুবারের প্রতিক্রিয়া দরকার :)
ফায়ারএফিস

16
গৌণ নাইট-পিক: রিলিজ মোডে, সি ++ আরটিটিআই (ডায়নামিক_কাস্ট, টাইপিড) এর ব্যবহার বুস্ট.স্টেটচার্টের সাথে কঠোরভাবে optionচ্ছিক।

111

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

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

আপনার অ্যাপ্লিকেশনটির জন্য এমএসএমের তুলনায় স্টেটচার্টের পারফরম্যান্সের ওভারহেডটি আসলেই তাৎপর্যপূর্ণ হবে কিনা তা আপনি যখন নিজেকে নিজেকে জিজ্ঞাসা করেন যে প্রতি অ্যাপ্লিকেশনটিতে আপনার অ্যাপ্লিকেশনটিতে কতগুলি ইভেন্ট প্রসেস করতে হবে answer

বুস্ট.স্টেচার্টের সাথে প্রয়োগ করা একটি পরিমিত জটিল এফএসএম ধরে নিচ্ছি, এখানে কয়েকটি বলপার্ক নম্বর রয়েছে:

  • সর্বাধিক বর্তমান পিসি হার্ডওয়্যার> প্রতি সেকেন্ডে 100'000 ইভেন্টগুলি সহজেই মোকাবেলা করবে
  • এমনকি খুব রিসোর্স-সীমাবদ্ধ হার্ডওয়্যার প্রতি সেকেন্ডে কয়েক শ ইভেন্টগুলিতে প্রক্রিয়া করতে সক্ষম হবে।

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

পারফরম্যান্স / স্কেলিবিলিটি ট্রেডঅফস সম্পর্কে আরও গভীরতার তথ্য এখানে পাওয়া যাবে: http://www.boost.org/doc/libs/1_45_0/libs/statechart/doc/performance.html


9
হাই অ্যান্ড্রেস, লেআউটটি ছড়িয়ে দেওয়ার বিষয়ে, কিছু উন্নতি হয়েছে। আপনি এখন বিভিন্ন কোরে সাবম্যাচিনগুলি সংকলন করতে পারেন। এটি নিখুঁত নয় তবে লক্ষণীয় উন্নতি। দেখুন svn.boost.org/svn/boost/trunk/libs/msm/doc/HTML/…
ক্রিস্টোফ হেনরি

11

আমার নিজের পিপিপি বাস্তবায়নের কোডিংয়ের সময় আমি তিনটি কারণে স্টেটচার্ট ব্যবহার করেছি: 1) স্টেটচার্টটি সহজ এবং স্পষ্টভাবে ডকুমেন্টেশন রয়েছে; 2) আমি সত্যিই ইউএমএলকে অপছন্দ করি :)

বুস্ট ডক্স বলছে এমএসএম কমপক্ষে 20 গুণ দ্রুত, তবে বড় এফএসএমের জন্য বেশ ধীর গতি সংকলন করে।


7
আমি যখন সম্মত হই যে ইউএমএলের বেশিরভাগ অংশই সম্রাটদের নতুন পোশাক, রাষ্ট্রীয় চার্টগুলি এমন এক জিনিস যা ইউএমএলে আসলে মূল্যবান।
জন ট্রান্টভেইন

4
অবশ্যই, তবে আমি সফটওয়্যার ইঞ্জিনিয়ারিং নয়, পৃথক গণিত থেকে স্টেটচার্ট শিখেছি learned এই পাতার একটি চিহ্ন :)
অকস্মাৎ জ্বলিয়া ত্তঠা

4

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


1
বেশিরভাগ স্টেটচার্ট ধরণের থ্রেডিংয়ের ঠিকানা দেয় না। মাল্টিথ্রেডিংয়ের ক্ষেত্রে, আপনি এমএসএম সমকক্ষের মতোই বুস্ট :: স্টেটচার্ট :: স্টেট_ম্যাচিন ব্যবহার করতে সক্ষম হবেন। boost :: statechart :: asynchronous_state_machine এবং সম্পর্কিত প্রকারগুলি স্টেটচার্ট লাইব্রেরির কঠোরভাবে optionচ্ছিক অংশ।

2

টিমের দেরিতে আলোচনায় প্রবেশের জবাবে (যা লেভের প্রথম দিকের মন্তব্যেও সম্বোধন করে)।

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

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

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

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

এটি সমস্ত ভাল নথিভুক্ত - আমি আপনাকে ডক্সটি পড়তে এবং এটি ব্যবহার করার পরামর্শ দিচ্ছি। আমি পরামর্শ দিচ্ছি যে আপনি "সফটওয়্যার রিসোর্সগুলি" পরিষ্কার করতে এবং "বাস্তব-বিশ্বের প্রস্থান ক্রিয়া" সম্পাদনের জন্য ক্রিয়াগুলি থেকে বেরিয়ে আসার জন্য ডেস্ট্রাক্টর ব্যবহার করুন।

এটি লক্ষ্য করার মতো বিষয় যে ব্যতিক্রম প্রচার কেবলমাত্র স্টেটচার্ট নয়, সমস্ত ইভেন্ট চালিত পরিবেশে কিছুটা সমস্যা। আপনার স্টেটচার্ট ডিজাইনে ত্রুটিগুলি / ত্রুটিগুলি সম্পর্কে যুক্তিযুক্ত এবং অন্তর্ভুক্ত করা ভাল এবং যদি কেবলমাত্র আপনি যদি সেগুলি পরিচালনা করতে না পারেন তবে ব্যতিক্রম ম্যাপিংয়ের উপায় অবলম্বন করুন। কমপক্ষে এটি আমার পক্ষে কাজ করে - ymmmv ....


আপনাকে ধন্যবাদ, আমি দেখতে পাচ্ছি যে বুস্ট :: স্টেটচার্ট টিউটোরিয়ালের "ব্যতিক্রম পরিচালনা" অংশে আমার সমস্ত উদ্বেগের যথেষ্ট সমাধান হয়েছে ly সেক্ষেত্রে আমি মনে করি লেভের (বিভ্রান্তিমূলক) মন্তব্যটি সেই টিউটোরিয়ালের "দ্বি-পর্যায় প্রস্থান" বিভাগের দিকে ইঙ্গিত করেই সমাধান করা যেতে পারে। আমি আপনার উত্তর মুছে ফেলার বিষয়ে বিবেচনা করব, আপনার নিজের উত্তরটি এই বিষয়ে মূল্যবান তথ্য যুক্ত করে।
টিম ক্রু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.