মাল্টি থ্রেডিং কেন কঠিন তা কীভাবে ব্যাখ্যা করবেন


84

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

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

তাহলে আমি কীভাবে তাকে পরিচয় করিয়ে দিতে পারি, বা ব্যাখ্যা করতে পারি যে তিনি কেন সমঝোতা, সমান্তরালতা এবং বহু-থ্রেডিংয়ের জটিলতাগুলিকে অবমূল্যায়ন করছেন? নাকি আমি ভুল করছি?

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


17
মাল্টি থ্রেডিং সহজ। সঠিক সিঙ্ক্রোনাইজেশন শক্ত।
ভিনিতে রেনল্ডস

33
তিন জনকে ঘরে বিশেষত বিভিন্ন অ্যাকসেন্টের সাহায্যে ঘরে আনুন এবং তাদের সম্মতি সংক্রান্ত সমস্যার ওভারল্যাপিং অংশগুলি .... একই সাথে আলাদা করে ব্যাখ্যা করুন।
গ্রেফ্যাড

মাল্টিথ্রেডিং খুব শক্ত বা খুব সহজ হতে পারে, হাতের সমস্যা এবং ভাষা সহায়তার উপর নির্ভর করে। ক্লোজওর
চাকরী

4
@ জোব সমকালীন প্রোগ্রামিং সর্বদা কঠোর (বাস্তব বিশ্বের প্রকল্পগুলিতে) আপনি কোন ভাষা ব্যবহার করছেন তা বিবেচ্য নয়। আপনি যখন পরিবর্তনীয় রাষ্ট্রগুলি ব্যবহার এবং উত্সাহিত করে এমন ভাষাগুলির সাথে এটি তুলনা করতে চান তখন স্কালা, ক্লজিউর বা এরলং এটিকে কিছুটা বিচক্ষণ করে তোলে।
চিরন

4
এর জন্য আমার প্রিয় রূপকটি হ'ল: "আপনি কি একই সাথে একটি ঘুমের বড়ি এবং একটি রেচক গ্রহণ করবেন?" এমনকি জটিল বার্তা সারিগুলি ব্যবহার করে, অর্ডার সম্পাতবিন্দু ফল অধিকার সম্পন্ন । এটি, যদি না আপনি এটির সাথে দুর্দান্ত অভিজ্ঞতা অর্জন করেন, তবে অনেক লোকের পক্ষে এটি কঠিন
টিম পোস্ট

উত্তর:


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

  2. "এটিতে একটি তালা চাপুন" এটি একটি তুচ্ছ সমাধান ... আপনি যদি পারফরম্যান্স সম্পর্কে উদ্বিগ্ন না হন তবে এটি আপনার সমস্ত সমস্যার সমাধান করে । উদাহরণস্বরূপ, আটলান্টায় কেউ যখনই কোনও বইয়ের অর্ডার দিচ্ছে তখন অ্যামাজনকে পুরো পূর্ব উপকূলটি লক করে ফেলতে হয়েছিল, উদাহরণস্বরূপ, কতটা পারফরম্যান্স হিট হবে তা চিত্রিত করার চেষ্টা করুন!


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

2
আমাজন নেই এক গুদাম সংক্ষিপ্তভাবে একটি পৃথক আইটেমের জায় লক করার একটি অর্ডার প্রক্রিয়া করার সময় আছে। যদি কোনও নির্দিষ্ট আইটেমে হঠাৎ করে বিশাল রান হয়, সরবরাহ শেষ হয়ে না যাওয়া এবং সন্ধানের অ্যাক্সেসটি কেবল পঠনযোগ্য না হয়ে যায় (এবং তাই 100% শেয়ারযোগ্য) ততক্ষণ পর্যন্ত সেই আইটেমটির জন্য ক্রিয়াকলাপের ক্রমটিই ক্ষতিগ্রস্থ হবে। আমাজন এক জিনিস যাচ্ছিল যে অন্যান্য প্রোগ্রামগুলি পুনরায় স্টক না হওয়া পর্যন্ত অর্ডার সারি করার ক্ষমতা এবং নতুন স্টোরের জন্য পুনরায় স্টক সরবরাহের আগে সারিবদ্ধ আদেশগুলি সরবরাহ করার বিকল্প নয়।
ব্লারফ্ল

@ ব্লারফ্লার: প্রোগ্রামগুলি সেগুলি করতে পারে যদি তারা কাতারে প্রবেশের বার্তাটি ব্যবহার করতে লেখা হয়। একটি একক কাতারে দিয়ে কোনও নির্দিষ্ট থ্রেডে সমস্ত বার্তা থাকার দরকার নেই ...
ডোনাল ফেলো

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

79

মাল্টি থ্রেডিং হয় সহজ। বহু-থ্রেডিংয়ের জন্য একটি অ্যাপ্লিকেশন কোডিং করা খুব, খুব সহজ।

একটি সহজ কৌশল আছে, এবং এটি থ্রেডগুলির মধ্যে ডেটা পাস করার জন্য একটি ভাল-ডিজাইন করা বার্তা সারি ( নিজের নিজস্ব রোল করবেন না ) ব্যবহার করা।

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

অনেক লোকেরা বার্তার সারি ব্যবহার করে না এবং ভাগ করা বস্তুগুলি আপডেট করার চেষ্টা করে এবং নিজের জন্য সমস্যা তৈরি করে।

যা কঠিন হয়ে ওঠে তা হল একটি অ্যালগরিদম ডিজাইন করা যা বেশ কয়েকটি সারির মধ্যে ডেটা পাস করার সময় ভাল কাজ করে। এটা কঠিন। তবে সহ-বিদ্যমান থ্রেডগুলির মেকানিক্স (ভাগ করা সারিগুলির মাধ্যমে) সহজ।

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

আপনি যদি ভাগ করা অবজেক্ট আপডেট সমস্যাটি চিত্রিত করতে চান তবে এটি সহজ। একগুচ্ছ কাগজ কার্ড নিয়ে টেবিল জুড়ে বসে। 4 বা 6 টি সহজ সূত্র - গণনাগুলির একটি সহজ সেট লিখুন পৃষ্ঠাতে প্রচুর জায়গা।

এখানে খেলা। আপনি প্রত্যেকে একটি সূত্র পড়েছেন, একটি উত্তর লিখুন এবং উত্তর দিয়ে একটি কার্ড লিখে রাখবেন।

আপনি প্রত্যেকে অর্ধেক কাজ করবেন, তাই না? আপনি অর্ধেক সময় শেষ করেছেন, তাই না?

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

খারাপভাবে বা আন-লক হওয়া সংস্থান সহ জাতিদের পরিস্থিতি তৈরি করার অনেকগুলি উপায় রয়েছে।

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


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

@ এয়ারসোর্স লিমিটেড "আপনার নাকগুলিকে তার মধ্যে ধাক্কা দিয়ে" আপনি ঠিক কী বলছেন? যতক্ষণ না আপনার কাছে একটি বার্তার সারি রয়েছে যা দুটি পৃথক থ্রেড একই বার্তা নিতে বাধা দেয়, সমস্যা হবে না। আপনার অর্থ বোঝাতে ভুল না হলে
জ্যাক

25

মাল্টি-থ্রেড প্রোগ্রামিং সম্ভবত সম্মতিতে সবচেয়ে কঠিন সমাধান। এটি মেশিনটি আসলে কী করে তা বেশ নিম্ন স্তরের বিমূর্ততা।

অভিনেতা মডেল বা (সফ্টওয়্যার) লেনদেনের মেমরির মতো অনেকগুলি পন্থা রয়েছে যা অনেক সহজ। বা অপরিবর্তনীয় ডেটা স্ট্রাকচার (যেমন তালিকা এবং গাছ) এর সাথে কাজ করা।

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

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

তবে অনুশীলনে, এই সমস্যাগুলি সমাধান করা অন্যান্য প্রোগ্রামিং সমস্যার মতোই শক্ত এবং যথাযথ বিমূর্ততা সহকারে সর্বোত্তমভাবে সম্পন্ন হয়। যা বাস্তবে এটি বেশ সহজ করে তোলে।


14

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

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

এই চ্যালেঞ্জটি প্রযুক্তিগত জড়িত বিষয়গুলি সম্পর্কিত নয়, যা লোকেরা কথোপকথনের মাধ্যমে উপেক্ষা করতে বা অক্ষম করতে পারে না, তবে পারস্পরিক শ্রদ্ধার সম্পর্ক স্থাপনে।


1
আকর্ষণীয় উত্তর, যদিও এটি একটি প্রযুক্তিগত প্রশ্ন। তবে আপনি যা বলছেন তার সাথে আমি একমত নই ... এই ক্ষেত্রে যদিও আমার ম্যানেজার বেশ ভাল প্রোগ্রামার, তবে আমি কেবল মনে করি কারণ তিনি বহু-থ্রেডযুক্ত অ্যাপ্লিকেশনগুলির জটিলতাগুলিতে আসেন নি, তিনি সেগুলি অবমূল্যায়ন করেন।
মিঃ শোবস

6

ডেডলকগুলি বোঝার জন্য একটি সাধারণ চিন্তার পরীক্ষা হ'ল " ডাইনিং দার্শনিক " সমস্যা। খারাপ জাতি পরিস্থিতিগুলি কীভাবে খারাপ হতে পারে তা বর্ণনা করার জন্য আমি যে উদাহরণ ব্যবহার করতে চাইছি তার মধ্যে একটি হ'ল থেরাক 25 পরিস্থিতি।

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


1
অর্থাত স্যান্ডউইচ সমস্যা: আপনি স্যান্ডউইচগুলির একটি গাদা তৈরি করেন তবে এখানে কেবল 1 টি মাখনের থালা এবং 1 টি ছুরি রয়েছে। সাধারণত সবকিছু ঠিক আছে তবে শেষ পর্যন্ত কেউ বাটারটি ধরে ফেলবে অন্য কেউ ছুরিটি ধরে ফেলবে .. এবং তারপরে তারা দুজন সেখানে দাঁড়িয়ে অপরটির জন্য অপেক্ষা করতে হবে যাতে তাদের সংস্থানটি চলে যায়।
gbjbaanb

এই জাতীয় অচলাবস্থার সমস্যাগুলি কি সর্বদা একটি সেট অর্ডারে সম্পদ অর্জন করে সমাধান করা যেতে পারে?
compman

@ কম্পিউটার, না। কারণ একই মুহুর্তে 2 টি থ্রেডের জন্য একই উত্সটির জন্য দখল করার চেষ্টা করা সম্ভব হয়েছে এবং এই থ্রেডগুলির অগত্যা একই সংস্থার সংস্থান প্রয়োজন হয় না - সমস্যা তৈরি করার জন্য কেবল একটি ওভারল্যাপ যথেষ্ট। একটি স্কীম হ'ল সংস্থানটি "পিছনে" রাখা এবং তারপরে আবার ধরে নেওয়ার আগে এলোমেলো সময়ের জন্য অপেক্ষা করা। এই ব্যাকফফ পিরিয়ডটি বেশ কয়েকটি প্রোটোকলগুলিতে ঘটে, যার প্রথম দিকের দিকটি ছিল আলোহা। en.wikipedia.org/wiki/ALOHAnet
Tangurena

1
যদি প্রোগ্রামটির প্রতিটি সংস্থার একটি সংখ্যা থাকে এবং যখন কোনও থ্রেড / প্রক্রিয়াটির একটি সংস্থান প্রয়োজন হয়, তখন এটি সর্বদা সংখ্যার ক্রম বাড়ানোর জন্য সংস্থানগুলিকে লক করে রাখে? আমি মনে করি না যে অচলাবস্থা ঘটতে পারে।
compman

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

3

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

সুতরাং একমাত্র সঠিক সমবর্তী অ্যাপ্লিকেশনটি হ'ল কার্যকরভাবে সঠিক, এমন কিছু যা সফ্টওয়্যার বিকাশে প্রায়শই অনুশীলন করা হয় না। ফলস্বরূপ, এস.লোটের উত্তর হ'ল সর্বোত্তম সাধারণ পরামর্শ, কারণ বার্তা পাস করা সঠিক প্রমাণ করা তুলনামূলক সহজ।


3

দুটি কথায় সংক্ষিপ্ত উত্তর: ওভারস্যাবল ননডেটার্মিনম

দীর্ঘ উত্তর: এটি আপনার সমস্যার ভিত্তিতে সমবর্তী প্রোগ্রামিংয়ের কোন পদ্ধতির উপর নির্ভর করে তা নির্ভর করে। কনসেপ্টস, টেকনিক্স এবং কম্পিউটার প্রোগ্রামিংয়ের মডেল বইয়ে লেখকগণ সমকালীন প্রোগ্রামগুলি লেখার জন্য চারটি প্রধান ব্যবহারিক পদ্ধতির স্পষ্টভাবে ব্যাখ্যা করেছেন:

  • সিক্যুয়ালিয়াল প্রোগ্রামিং : একটি বেসলাইন অ্যাপ্রোচ যার কোনও সহমত নেই;
  • ঘোষণামূলক সম্মতি : যখন কোনও পর্যবেক্ষণযোগ্য অ-সংজ্ঞা না থাকে তখন ব্যবহারযোগ্য;
  • বার্তা-পাসিং সম্মতি : প্রচুর সত্তার মধ্যে একযোগে বার্তা প্রবাহিত হয়, যেখানে প্রতিটি সত্তা অভ্যন্তরীণভাবে ম্যাসেজটি ধারাবাহিকভাবে প্রসেস করে;
  • ভাগ করা রাষ্ট্র সম্মতি : থ্রেড মোটা দানাযুক্ত পারমাণবিক ক্রিয়া, যেমন লক, মনিটর এবং লেনদেনের মাধ্যমে ভাগ করে নেওয়া প্যাসিভ অবজেক্টগুলিকে আপডেট করে;

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

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

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

পর্যবেক্ষণযোগ্য অ-নির্ধারিততার কারণে সমবর্তী প্রোগ্রামিং শক্ত , তবে প্রদত্ত সমস্যাটির জন্য সঠিক পদ্ধতির এবং সেই পদ্ধতির সমর্থনকারী সঠিক লাইব্রেরি ব্যবহার করার সময়, তখন অনেকগুলি বিষয় এড়ানো যায়।


0

আমাকে প্রথমে শিখানো হয়েছিল যে এটি 2 টি থ্রেড শুরু হওয়া একটি সাধারণ প্রোগ্রাম দেখে সমস্যাগুলি নিয়ে আসতে পারে এবং তাদের উভয়কে 1-100 থেকে একই সময়ে কনসোলে মুদ্রণ করতে হয়েছিল। পরিবর্তে:

1
1
2
2
3
3
...

আপনি এর মতো আরও কিছু পান:

1
2
1
3
2
3
...

এটি আবার চালান এবং আপনি সম্পূর্ণ ভিন্ন ফলাফল পেতে পারেন।

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


-3

হাতুড়ি ধারণকারীদের মধ্যে কিছুক্ষণ যোগাযোগ ছাড়াই একবারে ঘনিষ্ঠভাবে ব্যবধানযুক্ত নখের একগুচ্ছে ম্যাশ করার জন্য কয়েকটি হাতুড়ি ব্যবহার করার চেষ্টা করুন ... (ধরুন যে তারা চোখের পাতায় পড়ে আছেন)।

এটি একটি বাড়ি তৈরির জন্য বাড়ান।

রাতে স্থির হয়ে ঘুমানোর চেষ্টা করুন আপনি স্থপতি। :)


-3

সহজ অংশ: ফ্রেমওয়ার্কস, অপারেটিং সিস্টেম এবং হার্ডওয়্যার সমকালীন বৈশিষ্ট্যগুলি যেমন সেমফোরস, সারি, ইন্টারলকড কাউন্টার, পারমাণবিক বক্সযুক্ত প্রকার ইত্যাদির সাথে মাল্টিথ্রেডিং ব্যবহার করুন

শক্ত অংশ: প্রথম স্থানে কোনও বৈশিষ্ট্য ব্যবহার না করে তারা বৈশিষ্ট্যগুলি প্রয়োগ করুন, হার্ডওয়্যারটির কয়েকটি খুব সীমিত ক্ষমতা ব্যতীত হতে পারে, একাধিক কোর জুড়ে কেবল ক্লকিং সুসংহততা গ্যারান্টির উপর নির্ভর করে।


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