উত্তর:
এই প্রশ্নের সত্যিকারের উত্তরের জন্য আমি "দ্য জয় অফ ক্লজিউর" বা "প্রোগ্রামিং ক্লোজার" কে অত্যন্ত পরামর্শ দিচ্ছি, আমি প্রত্যেকটির অনুপ্রেরণার একটি সংক্ষিপ্ত স্নিপ পুনরুত্পাদন করতে পারি:
পরিচয় এবং / অথবা এখানে পড়াশোনার ধারণাটি নিয়ে এই ভিডিওটি দেখে শুরু করুন ।
সমন্বিত অ্যাক্সেস ব্যবহার করা হয় যখন দুটি পরিচয় এক সাথে পরিবর্তিত হওয়া দরকার, ক্লাসিক উদাহরণটি এক ব্যাংক অ্যাকাউন্ট থেকে অন্য অ্যাকাউন্টে অর্থ সঞ্চার করছে, এটি হয় পুরোপুরি সরানো দরকার বা একেবারেই নয়।
কেবলমাত্র একটি পরিচয় আপডেট করার প্রয়োজন হলে অসংযুক্ত অ্যাক্সেস ব্যবহার করা হয়, এটি খুব সাধারণ ঘটনা।
সিঙ্ক্রোনাস অ্যাক্সেস ব্যবহৃত হয় যখন কলটি চালিয়ে যাওয়ার আগে সমস্ত পরিচয় নিষ্পত্তি না হওয়া অবধি অপেক্ষা করতে থাকে।
অ্যাসিঙ্ক্রোনাস অ্যাক্সেস হ'ল "আগুন এবং ভুলে যাও" এবং পরিচয়টি তার নিজস্ব সময়ে নতুন অবস্থায় পৌঁছে দেয়।
ensure
ফাংশনটি ব্যবহার করার বিষয়ে বিবেচনা করুন ।
রেফসগুলি সেই রাষ্ট্রের জন্য যা থ্রেডগুলির মধ্যে সিঙ্ক্রোনাইজ করা দরকার। আপনার যদি বিভিন্ন জিনিসের একগুচ্ছ নজর রাখার প্রয়োজন হয় এবং আপনার মাঝে মাঝে অপারেশনগুলি করতে হবে যা একবারে বেশ কয়েকটি জিনিসকে লেখেন, রেফ ব্যবহার করুন। যে কোনও সময় আপনার একাধিক পৃথক রাষ্ট্রের টুকরা থাকে, রেফ ব্যবহার করা কোনও খারাপ ধারণা নয়।
পরমাণুগুলি স্বাধীন রাষ্ট্রের জন্য যা থ্রেডগুলির মধ্যে সিঙ্ক্রোনাইজ করা দরকার। আপনার যদি কখনই অ্যাটমের অবস্থা এবং একই সাথে অন্য কোনও কিছু পরিবর্তন করার প্রয়োজন হয় না, পরমাণু ব্যবহার করা নিরাপদ (বিশেষত, পুরো প্রোগ্রামে যদি শুধুমাত্র এক টুকরো রাষ্ট্র থাকে তবে আপনি এটি পরমাণুতে রাখতে পারেন) । একটি তুচ্ছ উদাহরণ হিসাবে, আপনি যদি কোনও ফাংশনের রিটার্ন মানগুলি (যেমন এটি স্মরণ করিয়ে দেওয়ার) ক্যাশে করার চেষ্টা করছেন তবে একটি পরমাণু ব্যবহার করা সম্ভবত নিরাপদ - ফাংশনটির বাইরের সমস্ত কিছুতে রাষ্ট্র অদৃশ্য, সুতরাং আপনাকে চিন্তার দরকার নেই ফাংশনটির অভ্যন্তরে কোনও রাজ্য পরিবর্তন সম্পর্কে গোলমাল।
এজেন্টদের প্রাথমিক পয়েন্টটি হ'ল তারা আলাদা থ্রেডে চলে। আপনি এজেন্টের মান পেতে পারেন এবং এটির মানটির সাথে একটি ফাংশন প্রয়োগ করতে বলতে পারেন, তবে ফাংশনটি কখন চলবে বা ফাংশনটি কী মান প্রয়োগ করা হবে তা আপনি জানেন না।
প্রতি-থ্রেড ভিত্তিতে আপনার যখন কিছু সঞ্চয় করতে হয় তখন যুদ্ধগুলি হয়। আপনার যদি একটি মাল্টি-থ্রেডেড প্রোগ্রাম থাকে এবং প্রতিটি থ্রেডের নিজস্ব ব্যক্তিগত রাষ্ট্রের প্রয়োজন হয় তবে সেই রাজ্যটিকে একটি ভারে রাখুন।
রিয়েল-ওয়ার্ল্ডের উদাহরণগুলি যতদূর যায়, আপনি যা করার চেষ্টা করছেন তার একটি উদাহরণ যদি আপনি সরবরাহ করেন তবে আমরা আপনাকে কী ব্যবহার করতে হবে তা বলতে পারি।
আমি প্রথম যখন এই প্রকারগুলি সম্পর্কে পড়ি, তখন আমি বুঝতে চেষ্টা করেছিলাম যে আমি কোথায় প্রতিটি ব্যবহার করতে পারি বা ব্যবহার করতে পারি তাই আমার স্পষ্ট ইংরেজি উত্তরটি এখানে:
ডেটা পরিবর্তন হবে না যখন একটি var ব্যবহার করুন। এই ঘটনা যখনই আপনি ব্যবহার def
অথবা সবচেয়ে ফাংশন যে দিয়ে শুরু def
মত defn
।
আপনার যখন কোনও একক আইটেম পরিবর্তিত হয় তখন একটি পরমাণু ব্যবহার করুন। একটি উদাহরণ কোনও কাউন্টার বা ভেক্টর হতে পারে যা আপনি আইটেমগুলিতে যুক্ত করতে চান।
আপনার যখন দুটি বা ততোধিক জিনিস থাকে তখন একই সময়ে পরিবর্তন করতে হবে a আপনি যদি পরিচিত হন তবে "ডাটাবেস লেনদেন" ভাবেন। এর আধ্যাত্মিক উদাহরণটি এক অ্যাকাউন্ট থেকে অন্য অ্যাকাউন্টে অর্থ স্থানান্তর করা। প্রতিটি অ্যাকাউন্ট একটি রেফারেন্সে সংরক্ষণ করা যেতে পারে যাতে পারমাণবিক প্রদর্শিত হতে পারে।
আপনি যখন কিছু পরিবর্তন করতে চান তখন কোনও এজেন্ট ব্যবহার করুন তবে কখন সে যত্ন করবেন না। এটি একটি দীর্ঘ গণনা বা ফাইল বা সকেটে কিছু লেখা হতে পারে। নোট করুন যে পরবর্তীগুলির সাথে আপনার ব্যবহার করা উচিত send-off
।
দ্রষ্টব্য: আমি প্রশংসা করি যে এগুলির প্রতিটির জন্য আরও অনেক কিছু রয়েছে তবে আশা করি এটি আপনাকে একটি সূচনা পয়েন্ট দেবে।
আমি তাদের মধ্যে পার্থক্য সংক্ষিপ্তসার সহ নিবন্ধ লিখেছিলাম এবং কোনটি কখন ব্যবহার করবেন তা চয়ন করতে সহায়তা করে।
রাজ্য ভাগ করুন - কখন যুদ্ধ, পরমাণু, এজেন্ট এবং রেফ ব্যবহার করবেন?
আমি আশা করি এটি এই বিষয়ে লোকদের উত্তর খুঁজতে সহায়তা করবে।
@ ফুনাছির পরামর্শের পরে নিবন্ধ থেকে কিছু শর্টকাট:
Vars,
বারগুলি প্রতিটি থ্রেডের জন্য বৈশ্বিক।
তৈরির পরে ভার্স পরিবর্তন করবেন না। এটি প্রযুক্তিগতভাবে সম্ভব, তবে এটি বহু কারণে খারাপ ধারণা।
অ্যাটমস
প্রতিটি থ্রেডের জন্য পরিবর্তনীয় স্থানে অ্যাক্সেস ভাগ করুন। পরিবর্তন সিঙ্ক্রোনালি ঘটে। যখন অন্য থ্রেড চলাকালীন রাষ্ট্র পরিবর্তন করে তবে আবার চেষ্টা করুন।
দীর্ঘ সময় কার্যকরকরণের সাথে আদর্শহীন ফাংশন এবং ফাংশন ব্যবহার করবেন না
এজেন্ট
প্রতিটি থ্রেডের জন্য পরিবর্তনীয় স্থানে অ্যাক্সেস ভাগ করুন। অ্যাসিঙ্ক্রোনালি পরিবর্তন হয়।
refs
রেফস ডাটাবেস লেনদেনের মতো কাজ করে। লিখুন এবং পড়ুন dosync সুরক্ষিত। আপনি লেনদেনে নিরাপদে অনেকগুলি রেফের উপর পরিচালনা করতে পারেন।
এবং ফ্লোচার্ট যখন ব্যবহার করুন:
ওয়েবসাইটটিতে চিত্রটি দেখুন, কারণ কিছু আপডেট সর্বদা সম্ভব।
অনুলিপি এবং অতীত নিবন্ধ ছাড়াই পুরো উত্তর দেওয়া জটিল এবং দীর্ঘ বিষয়, সুতরাং দয়া করে আমাকে ক্ষমা করুন আমি আপনাকে ওয়েবসাইটে পুনঃনির্দেশ করি :)
পরমাণু, রেফস এবং এজেন্টস - এখানে কিছু আলোকসজ্জা http://blog.jayfields.com/2011/04/clojure-state-management.html
state-a
উল্লেখstate-b
করি তবে আমার এখনও একটিref
সঠিক প্রয়োজন ? সুতরাং এটি একাধিক জিনিস পরিবর্তন না করে একাধিক জিনিস উল্লেখ করে যখন কোনও পরিবর্তন করার সময়?