রাজ্য মেশিন বনাম থ্রেড


24

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


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

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

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

2
"তবে [থ্রেড] বিমূর্তি আপনাকে অনেক সহজ এবং কম ত্রুটি-প্রবণ ইন্টারফেস সরবরাহ করে।" এটা মিথ্যা বলে মনে হচ্ছে। থ্রেড-সুরক্ষা ভুল হওয়া লোকের সংখ্যাটি এটির ত্রুটির কারণ হিসাবে দেখা দেয়।
এস.লোট

1
এখানে প্রচুর মন্তব্য এবং উত্তরগুলি উদ্ধৃতিটিকে সাধারণভাবে মাল্টিটাস্কিং বিরোধী হিসাবে ব্যাখ্যা করে; আমি বিশ্বাস করি অ্যালান কক্স নিছক থ্রেড বিরোধী এবং লোকেরা যে থ্রেডগুলি ব্যবহার করে তার জন্য লক্ষ্যগুলি অর্জন করে এমন অনেকগুলি লক্ষ্য অর্জনে একাধিক প্রক্রিয়া ব্যবহারের পক্ষে পরামর্শ দেবে। মনে রাখবেন তিনি একজন ইউনিক্স হ্যাকার: কাঁটাচামচা এফটিডাব্লু। উদ্ধৃতিতে আমি সরাসরি তাঁর কাছ থেকে কোনও মন্তব্য পাইনি, তবে লিনাক্স কার্নেল মেলিং তালিকা থেকে ল্যারি ম্যাকভয়ের এই মন্তব্যটি এখানে এসেছে যে: lkML.indiana.edu/hypermail/linux/kernel/0106.2/0405.html
মার্টিন বি

উত্তর:


25

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

একটি একক-কোর কম্পিউটারে আসলে "একই সাথে" কিছুই হয় না । এটি সবই কেবল আন্তঃবাহিতভাবে কার্যকর করা হয়েছে।

ইন্টারলেভিং অর্জনের অনেকগুলি উপায় রয়েছে। অনেক।

ধরা যাক আপনার একটি সহজ দ্বি-থ্রেড প্রক্রিয়া রয়েছে যা একটি সাধারণ লক ব্যবহার করে যাতে উভয় থ্রেড একটি সাধারণ ভেরিয়েবলে লিখতে পারে। আপনার কাছে কোডের ছয়টি ব্লক রয়েছে।

  • টি 1-এর আগে লক
  • টি 1-সহ লক
  • টি 1-পরে লক
  • টি 2-এর আগে লক
  • টি 2 সহ লক
  • টি 2-পরে লক

[এটি লুপে থাকতে পারে বা আরও লক বা যা কিছু থাকতে পারে। এটি কেবল দীর্ঘতর হবে, আরও জটিল নয়]]

টি 1-এর পদক্ষেপগুলি অবশ্যই চলতে হবে (টি 1-এর আগে, টি 1-সহ, টি 1-পরে) এবং টি 2-র পদক্ষেপগুলি অবশ্যই যথাযথভাবে চলতে হবে (টি 2-এর আগে, টি 2-সহ, টি 2-পরে)।

"ইন-অর্ডার" সীমাবদ্ধতা ব্যতীত এগুলি যে কোনও উপায়ে ইন্টারলিভ করা যেতে পারে। যেভাবেই হোক। তারা উপরে তালিকাবদ্ধ হিসাবে চালানো যেতে পারে। আর একটি বৈধ অর্ডারিং (টি 1-এর আগে, টি 2-আগে, টি 2-লক, টি 1-লক, টি 2-পরে, টি 1-পরে)। প্রচুর বৈধ অর্ডার রয়েছে।

অপেক্ষা করুন।

এটি ছয়টি রাজ্য সহ কেবল একটি রাষ্ট্রীয় যন্ত্র।

এটি একটি অ-নিরঙ্কুশিত সসীম রাষ্ট্র অটোমাতা। টি 2-এক্সএক্সএক্সএক্স রাজ্যগুলির সাথে টি 1-এক্সএক্সএক্সএক্স রাজ্যের ক্রমটি অনির্দিষ্ট এবং এটি কোনও বিষয় নয়। সুতরাং এমন জায়গাগুলি রয়েছে যেখানে "পরবর্তী রাষ্ট্র" একটি কয়েন টস।

উদাহরণস্বরূপ, যখন এফএসএম শুরু হয়, টি 1-এর আগে বা টি 2-পূর্ব উভয়ই বৈধ প্রথম রাষ্ট্র are একটি মুদ্রা শিরসঁচালন.

ধরা যাক এটি টি 1-এর আগে এসেছিল। কর এটা. এটি হয়ে গেলে, T1-with এবং T2-এর আগে একটি পছন্দ আছে। একটি মুদ্রা শিরসঁচালন.

এফএসএমের প্রতিটি ধাপে দুটি পছন্দ (দুটি থ্রেড - দুটি পছন্দ) থাকবে এবং কোন মুদ্রার টস নির্ধারণ করতে পারে কোন নির্দিষ্ট রাজ্যটি অনুসরণ করা হয়।


ধন্যবাদ, সুন্দর ব্যাখ্যা। এবং মাল্টি-কোর মেশিনের কী হবে? আমার ধারণা, জাভা স্টেট মেশিনে কোরের শোষণের কোনও সুস্পষ্ট উপায় নেই? এর জন্য ওএসের উপর নির্ভর করা দরকার, তাই না?
ভিক্টর সোরোকিন

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

9

ব্লকিং ফাংশনগুলি লিখন হ'ল লোকেরা যা রাষ্ট্রীয় মেশিন তৈরি করতে পারে না;)

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

আপনি কোনও রাষ্ট্রীয় মেশিনে ব্লকিং ফাংশন ব্যবহার করতে পারবেন না (কমপক্ষে এমন একটি যা "হিমায়িত করার অনুমতি দেওয়া যায় না)"।

এবং হ্যাঁ, রাষ্ট্রীয় মেশিন ব্যবহার করা একটি কার্যকর বিকল্প। রিয়েল টাইম সিস্টেমে এটিই একমাত্র বিকল্প, সিস্টেমটি মেশিনের জন্য একটি কাঠামো সরবরাহ করে। থ্রেড এবং ব্লকিং ফাংশনগুলি ব্যবহার করা কেবল "সহজ উপায়", কারণ সাধারণত একটি ব্লকিং ফাংশনে একটি কল স্টেট মেশিনে প্রায় 3-4 টি স্থানে প্রতিস্থাপন করে।


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

1
@ ডেভিড শোয়ার্টজ: সত্য, এটি মূলত অবরুদ্ধ; তবে এটি কোনও 'অপারেশন' নয় যেহেতু এটি ব্লকড কোডটি করে এমন কিছু নয়, এটি এর সাথে ঘটে something
জাভিয়ের

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

1
@ ডেভিড শোয়ার্টজ: "ব্লকিং" আচরণের সংজ্ঞা সর্বদা "রিয়েল-টাইম" প্রয়োজনীয়তার সাপেক্ষে। উদাহরণস্বরূপ: কোড পৃষ্ঠা ত্রুটিটিকে অ্যাপ্লিকেশনের জন্য অ ব্লক করা হিসাবে বিবেচনা করা হয় যা কয়েকশ মিলি সেকেন্ডের ক্রমে প্রতিক্রিয়াশীলতার প্রয়োজন। অন্যদিকে যদি অ্যাপ্লিকেশনটির কঠোর রিয়েলটাইম প্রয়োজনীয়তা থাকে তবে এটি ভার্চুয়াল মেমরিটি মোটেই ব্যবহার করবে না।
মার্চ

1
@ মার: ... বা একটি নির্বোধী অদলবদল অ্যালগরিদম ব্যবহার করুন যা প্রয়োজনীয় হওয়ার আগে প্রয়োজনীয় ডেটা আনার গ্যারান্টি দেয়।
এসএফ

9

কীভাবে একজন মাত্র একটি থ্রেড এবং রাষ্ট্রীয় মেশিন ব্যবহার করে জাভা হিসাবে উচ্চ-স্তরের ভাষায় একাধিক-থ্রেডিং কার্যকারিতা অর্জন করে? উদাহরণস্বরূপ, যদি সঞ্চালনের জন্য 2 টি ক্রিয়াকলাপ হয় (গণনা করা এবং I / O করা) এবং একটি ক্রিয়াকলাপ অবরুদ্ধ করতে পারে?

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

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

উচ্চ-স্তরের ভাষাগুলিতে মাল্টি-থ্রেডিংয়ের "কেবলমাত্র রাষ্ট্র-মেশিন" উপায় ব্যবহারযোগ্য বিকল্প?

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

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

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

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

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

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


2

যদি 2 টি কার্যক্রম সম্পাদন করা হয় (গণনা করা এবং I / O করা) এবং একটি ক্রিয়াকলাপ অবরুদ্ধ করতে পারে?

আচ্ছা আমি সত্যই কিভাবে থ্রেড ছাড়াই I / O- কে ব্লক করা পরিচালনা করব তা কল্পনা করতে পারি না। এটিকে পুরোপুরি ব্লকিং বলা হয় কেবল কোডের কারণে যে এটি করতে হয় wait

মূল কক্স 'ইমেল পড়ার পরে (নীচে) যে থ্রেডিং ভাল স্কেল করে না তা উল্লেখ করেছেন। মানে, যদি 100 I / O অনুরোধ থাকে তবে কী হবে? 1000? 10000? কক্স নির্দেশ করছে যে প্রচুর পরিমাণে থ্রেড থাকা গুরুতর সমস্যা হতে পারে:

থেকে: অ্যালান কক্স (alan@lxorguk.ukuu.org.uk)
তারিখ: শুক্র 21 জানুয়ারী 2000 - 13:33:52 ইএসটি

আইবিএম পেপার), আপনার অ্যাপ্লিকেশনটি যদি বিপুল সংখ্যক থ্রেডের উপর নির্ভর করে তবে আপনি সবসময় শিডিয়ুলারের বিপরীতে বাম্প চালিয়ে যাবেন? অনেক লোক সমস্যায় প্রচুর থ্রেড ফেলে দেয় এবং এটি সত্যই খারাপ ডিজাইন হতে পারে।

আপনার চিন্তার মধ্যে এটিই সবচেয়ে কম। 1000 থ্রেডগুলি 8Mb কার্নেল স্ট্যাক এবং আপনার নিজের ক্যাশের বেশিরভাগ অংশ বন্ধ করে দিতে পারে তা নিশ্চিত করার জন্য পর্যাপ্ত কার্যাদি স্যুইচ করা। কম্পিউটার একটি রাষ্ট্রীয় মেশিন। থ্রেডগুলি এমন লোকদের জন্য যারা প্রোগ্রামের রাষ্ট্রের মেশিনগুলি ক্যান না করে।

লিনাক্স নিশ্চিতভাবে অ্যাসিক্রোনাস ব্লক আই / ও পরিস্থিতিটিকে সহায়তা করছে না এমন প্রচুর কেস রয়েছে।

অ্যালান

উত্স: পুনরায়: আইবিএম দ্বারা লিনাক্স কার্নেল থ্রেডিংয়ের আকর্ষণীয় বিশ্লেষণ (লিনাক্স-কার্নেল মেলিং তালিকার সংরক্ষণাগারগুলি)


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

  • রাষ্ট্রীয় মেশিনগুলির সাথে সমস্যাটি সম্মিলিত বিস্ফোরণ। 4 জি র‌্যামযুক্ত কম্পিউটারের রাজ্যের সংখ্যা 2 ^ (2 ^ 32) রাজ্য (2 টি ডিস্ক ড্রাইভ গণনা করছে না)।

  • এমন এক ব্যক্তির কাছে যার একমাত্র হাতিয়ার হাতুড়ি, প্রতিটি সমস্যা পেরেকের মতো দেখাচ্ছে।


1

থ্রেড দুটি ক্ষেত্রে একমাত্র বিকল্প:

  • মেমরি বিচ্ছেদ ছাড়াই একাধিক কোর ব্যবহার করতে to
  • বাহ্যিক কোড যে ব্লক করে মোকাবেলা করতে।

দ্বিতীয়টি কারণ বেশিরভাগ লোকেরা মনে করেন যে আইও বা নেটওয়ার্ক প্রোগ্রামিংয়ের জন্য থ্রেডগুলি অনিবার্য,

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


1
উভয় বিশ্বের সেরা: ক্ষুদ্র, থ্রেডগুলিতে স্টেট মেশিনগুলিকে ব্লক করা খুব সাধারণ অ্যাপ্লিকেশন কোড তৈরি করে। এবং থ্রেডগুলি পেয়ে গেলে খুব ভালভাবে বিভক্ত হয়। যদি কমপক্ষে দুটি কোর না থাকে তবে খুব শীঘ্রই এটি ঘটবে। অর্থাত কোয়াড কোর আর্ম ভিত্তিক ফোন আসছে 2012.
টিম উইলিসক্রফট

0

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

while (true) {
    switch (event) {
        case ButtonPressed:
        ...
        case MachineIsBurning:
        ....
    }
}

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

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

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

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


0

রাষ্ট্রীয় মেশিনটি উচ্চ স্তরের ভাষায় ব্যবহারযোগ্য কিনা তা জিজ্ঞাসা করা যেমন এসেম্বলারের মধ্যে লেখা একটি উচ্চ স্তরের ভাষা ব্যবহারের একটি কার্যকর বিকল্প কিনা তা জিজ্ঞাসার মতোই is সঠিক পরিস্থিতি দেওয়াতেই উভয়েরই জায়গা রয়েছে।

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


0

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

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

কিছু ক্ষেত্রে, একটি রাষ্ট্রীয় মেশিনটি আরও ভাল পছন্দ হবে - আমি এখন এমবেডেড ধরণের স্টাফগুলির কথা ভাবছি যেখানে কয়েকটি রাষ্ট্রের মেশিন নিদর্শন ব্যবহৃত হয়, এবং বারবার এবং আরও আনুষ্ঠানিকভাবে ব্যবহৃত হয় (যেমন সঠিক প্রকৌশল :))

থ্রেডিং সঠিকভাবে পাওয়াও কঠিন হতে পারে তবে আপনাকে সাহায্য করার জন্য নিদর্শন রয়েছে - মূলত থ্রেডগুলির মধ্যে ডেটা ভাগ করার প্রয়োজনীয়তা হ্রাস করে।

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


2
রাষ্ট্রীয় মেশিনগুলি মোটেই জটিল নয়! জটিল রাষ্ট্র মেশিনগুলি জটিল, তবে সমস্ত জটিল
সিস্টেমও রয়েছে

2
"চেষ্টা করবেন না" এর জন্য -1। এটিই আপনি দিতে পারেন সবচেয়ে খারাপ পরামর্শ।
জাভিয়ের

1
-1 "চেষ্টা করবেন না"? এটা ঠিক বোকা। আমি আপনার এই দাবিটিকেও চ্যালেঞ্জ জানাব যে রাষ্ট্রীয় মেশিনগুলি শক্ত। একবার আপনি যদি হীরার্কাল ফাজি স্টেট মেশিনের মতো কিছুতে প্রবেশ করেন ... তবে হ্যাঁ, এটি কিছুটা জটিল। কিন্তু একটি সরল রাষ্ট্রের মেশিন? এটি বেশ বেসিক স্টাফ যা প্রতি দ্বিতীয় বছর আমি স্কুলে পড়ার সময় শিখেছিলাম।
স্টিভেন ইভার্স

আমাকে 'পুনরায় চেষ্টা করুন' বিট পুনরায় লিখুন ...
gbjbaanb

0

থ্রেডগুলির পরিবর্তে যথাযথ স্টেট মেশিন ব্যবহারের ভাল উদাহরণ: এনগিনেক্স বনাম অ্যাপাচি 2। সাধারণত আপনি ধরে নিতে পারেন যে এনগিনেক্স সমস্ত সংযোগ একটি থ্রেডে পরিচালনা করে, অ্যাপাচি 2 সংযোগ প্রতি একটি থ্রেড তৈরি করে।

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

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