অভিনেতারা থ্রেডের সাথে তুলনা করে কীভাবে কাজ করবেন?


88

থ্রেডগুলির সাথে তুলনায় অভিনেতারা কীভাবে কাজ করে তার কোনও ভাল এবং সংক্ষিপ্ত ব্যাখ্যা আছে?

কোনও থ্রেডকে অভিনেতা হিসাবে দেখা যাবে না এবং অন্যান্য থ্রেডে বার্তা পাঠানো যাবে না? আমি কিছু পার্থক্য দেখছি, তবে এটি আমার পক্ষে পরিষ্কার নয়। অভিনেতাদের আমি কোনও ভাষায় থ্রেড আলাদাভাবে ব্যবহার করে ব্যবহার করতে পারি ?

উত্তর:


78

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

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

কোনও থ্রেডকে অভিনেতা হিসাবে দেখা যাবে না এবং অন্যান্য থ্রেডে বার্তা পাঠানো যাবে না?

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

আমি কীভাবে অভিনেতা মডেলকে কোনও ভাষায় থ্রেড আলাদাভাবে ব্যবহার করে ব্যবহার করতে পারি?

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

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


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

2

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

জ্যাক্টর (একটি জাভা গ্রন্থাগার) লকগুলিও ব্যবহার করে না। কয়েকটি সেমফোর রেখে কেবল কয়েকটি পারমাণবিক এবং সমবর্তী ডেটা স্ট্রাকচার Message বার্তা পাঠানো প্রতি সেকেন্ডে প্রায় .8 বিলিয়ন বার্তা।

https://github.com/laforge49/JActor


4
অভিনেতা মডেলটি কেবল অ্যাসিনক্রোনাস যোগাযোগ ( en.wikedia.org/wiki/Actor_model ) ব্যবহার করে সংজ্ঞায়িত করা হয় । যদি জ্যাক্টর এটি না করে, তবে এটি 100% কেবল অভিনেতা মডেল নয়। এটি কেবল অভিনেতার মডেলটিকে এর বৈশিষ্ট্যগুলির মধ্যে একটির হিসাবে ব্যবহার করতে পারে।
বিটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.