অভিনেতার মডেল সম্পর্কে আমার বর্ণনাটি কি ঠিক?


13

যদি আমি বুঝতে পারি, অভিনেতা মডেলটি কেবল অবজেক্ট মডেলের মতো তবে কয়েকটি পার্থক্য সহ:

  1. প্রতিটি বস্তু এটির নিজস্ব আলাদা থ্রেড তৈরি করে এবং আপনার হাজার হাজার বস্তু থাকা সত্ত্বেও এটি কোনও সমস্যা নয়।
  2. অভিনেতা ফাংশনগুলিতে কল করে এবং ফেরতের মানগুলি অর্জন করে পরিবর্তে বার্তা প্রেরণ ও গ্রহণ করে ইন্টারঅ্যাক্ট করেন না।
  3. আপনি যদি সেই মডেলটি লঙ্ঘন না করেন তবে আপনার অ্যাপ্লিকেশন জাতিগত অবস্থার কোনও ঝুঁকি ছাড়াই তার সম্পূর্ণ শক্তিতে সম্মতি ব্যবহার করবে।
  4. আপনি ওয়েতে যা কিছু করতে পারেন আপনি অভিনেতাদের ব্যবহার করেই করতে পারেন তবে আরও ভাল, সমস্যাটি হ'ল আমরা গত বছরগুলিতে কোড করেছিলাম সমস্তই ওও ভিত্তিক ছিল - তবে একটি রূপান্তর আসন্ন is

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

অবজেক্ট ওরিয়েন্টেড:

class V3d {
   constructor V3d(x,y,z) //bla
   float x,y,z;
   function sum(V3d b) 
   { 
      return V3d(x+b.x,y+b.y,z+b.z); 
   }
}

//using:
mySum = V3d(1,2,3).sum(V3d(3,2,1)) //creates 2 instances, sum, returns instantly
drawPoint(mySum) //uses the result

অভিনেতার মডেল:

actor V3d 
{
    constructor V3d(x,y,z) //bla
    float x,y,z;
    loop 
    {
       receive 'sum',b:V3d :
           send(caller,'sumResult',V3d(x+b.x,y+b.y,z+b.z))
    }
 }

//using:
send(V3d(1,2,3),'sum',V3d(3,2,1)) //creates 2 instances, send to the first one a request to sum with the second one

loop 
{
   receive 'sumResult',result:
      drawPoint(result) //receives result and draws it
}

এইটাই কি সেইটা? নাকি আমি পুরোপুরি ভুল?


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

উত্তর:


12

সংক্ষিপ্ত উত্তরটি হ'ল না, এটি সঠিক নয়।

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

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

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

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


অভিনেতার সংখ্যা এবং থ্রেডের সংখ্যার মধ্যে কোনও সম্পর্ক নেই; অভিনেতার মডেল যা গ্যারান্টি দেয় তা হ'ল একটি প্রদত্ত দৃষ্টান্তটি কেবল একবারে একটি থ্রেড দ্বারা পরিচালিত হবে, সুতরাং আপনার অভিনেতারা ইতিমধ্যে থ্রেড-নিরাপদ এবং আপনাকে তাদের মধ্যে সিঙ্ক্রোনাইজেশন এবং লক করার কৌশল ব্যবহার করার দরকার নেই।
রব ক্রফোর্ড

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

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

2

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

3 সম্পর্কিত: আমি দৃ sure়ভাবে নিশ্চিত যে প্রোগ্রামিং লজিকের কারণে অভিনেতার মডেলিং সিস্টেমে জাতিদের অবস্থা হতে পারে?

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

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


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