আক্কা কিল বনাম স্টপ বনাম বিষের বড়ি?


212

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

অনেক ধন্যবাদ!


12
আরএস_এটল এর খুব ভাল উত্তর দিয়েছিল, আমাকে কেবল যোগ করতে দাও যে অভিনেতাদের সম্পর্কে কিছুই সিঙ্ক্রোনাস নয়, প্রসঙ্গেও নয়। স্টপ (স্ব)।
রোল্যান্ড কুহন

1
কী @RolandKuhn context.become?
আয়নু জি স্টান

3
context.becomeপরবর্তী বার্তায় প্রয়োগ করার জন্য আচরণটি নির্ধারণ করে যার অর্থ বর্তমান বার্তাটি প্রক্রিয়া করার পরে এটি কার্যকর হয়; এই ক্ষেত্রে এটি বেশ মত context.stop(self)
রোল্যান্ড কুহন

উত্তর:


328

উভয়ই stopএবং PoisonPillঅভিনেতাকে সমাপ্ত করবে এবং বার্তার সারি বন্ধ করবে। তারা অভিনেতাকে বার্তাগুলি প্রক্রিয়াকরণ বন্ধ করতে, তার সমস্ত বাচ্চাদের একটি স্টপ কল প্রেরণ করবে, তাদের সমাপ্ত হওয়ার জন্য অপেক্ষা করবে, তারপরে তার postStopহুকটি কল করবে । আরও সমস্ত বার্তা মৃত চিঠিপত্র মেলবক্সে প্রেরণ করা হয়।

পার্থক্যটি হ'ল এই ক্রমটি শুরু হওয়ার আগে বার্তাগুলি প্রক্রিয়াজাত হয়। stopকলের ক্ষেত্রে, বর্তমানে প্রক্রিয়া করা বার্তাটি প্রথমে সম্পূর্ণ হবে, অন্য সকলকে বাতিল করে দেওয়া হবে। একটি প্রেরণ করার সময় PoisonPill, এটি কেবল কাতারে অন্য একটি বার্তা, সুতরাং ক্রমটি যখন PoisonPillপ্রাপ্ত হবে তখনই এটি শুরু হবে । কাতারে এটির আগে থাকা সমস্ত বার্তা প্রথমে প্রক্রিয়া করা হবে।

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

ডকসগুলিতে 'একটি অভিনেতা থামানো', 'একজন অভিনেতাকে হত্যা করা' বিভাগটিও দেখুন:

http://doc.akka.io/docs/akka/snapshot/scala/actors.html

তদারকি কৌশলগুলি এবং আরও:

http://doc.akka.io/docs/akka/snapshot/scala/fault-tolerance.html


4
চমৎকার উত্তর আপনাকে ধন্যবাদ, আক্কা টিউটোরিয়াল পোস্ট করা উচিত!
লালোইনডাবলিন

16
কিল বার্তা অভিনেতাকে সাধারণ তত্ত্বাবধায়ক প্রক্রিয়া ব্যবহার করে পুনরায় আরম্ভ করতে দেয় না যদি আপনি অ-ডিফল্ট সুপারভাইজার কৌশল ব্যবহার না করেন কারণ অভিনেতা-কিল্ড এক্সসেপশন পুনরায় আরম্ভ না করে থামার জন্য সমাধান করে।
লিসাক

আসলে এটি বেশ বিরক্তিকর কারণ অভিনেতাদের পুনরায় চালু করার একমাত্র অন্তর্নিহিত উপায়টি ব্যতিক্রম ছোঁড়াচ্ছে।
লিজাক

বা তত্ত্বাবধায়ক অভিনেতার কাছ থেকে পোইজনপিল পাঠানো যা আবার চালু করা উচিত এবং এটি আবার শুরু করা উচিত।
লিসাক

ব্যবহার করে কি কোনও পার্থক্য আছে context.stop(self)?
বার

1

আপনি যখন পারেন পয়জনপিল ব্যবহার করুন। এটি মেলবক্সে রাখা হয় এবং অন্য কোনও বার্তার মতো গ্রাস করা হয়। আপনি কোনও অভিনেতার মধ্যে থেকে "কনটেক্সট.স্টপ (স্ব)" ব্যবহার করতে পারেন।


0

পইজনপিলের আগে মেলবক্সে প্রাপ্ত সমস্ত বার্তাগুলি সম্পন্ন হওয়ার পরে পইজনপিল অভিনেতাকে অবিচ্ছিন্নভাবে থামিয়ে দেয়।


20
না, কিলের কোনও বিশেষ অগ্রাধিকার নেই, ঠিক যেমন পয়জনপিল
রোল্যান্ড কুহান

0

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

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