কর্টাইনগুলি কেন ফিরে? [বন্ধ]


19

কর্টিনগুলির বেশিরভাগ ভিত্তি 60s / 70 এর দশকে ঘটেছিল এবং তারপরে বিকল্পগুলির পক্ষে বন্ধ হয়ে যায় (যেমন, থ্রেড)

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



9
আমি নিশ্চিত না যে তারা কখনও চলে গেছে।
blrfl

উত্তর:


26

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

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

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

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

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

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

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

  • পাইথনের এই দুর্ভাগ্যজনক বৈশিষ্ট্যটি গ্লোবাল ইন্টারপ্রেটার লক নামে পরিচিত। মূলত পাইথন মেমরির মডেলটি হ'ল "সমস্ত প্রভাব ক্রমান্বয়ে প্রদর্শিত হয় কারণ কোনও সমান্তরালতা নেই। এক সময় কেবল একটি থ্রেড পাইথন কোড চালাবে ”" তাই পাইথনের থ্রেড থাকলেও এগুলি কেবল কর্টিনগুলির মতোই শক্তিশালী। [1] পাইথন এর সাহায্যে জেনারেটর ফাংশনগুলির মাধ্যমে অনেকগুলি কর্টিনগুলিকে এনকোড করতে পারে yield। যদি সঠিকভাবে ব্যবহার করা হয় তবে এটি একা জাভাস্ক্রিপ্ট থেকে পরিচিত কলব্যাক হেল্কের বেশিরভাগ অংশ এড়াতে পারে। পাইথন ৩.৫-এর অতি সাম্প্রতিক অ্যাসিঙ্ক / অপেক্ষার সিস্টেমটি পাইথনে অ্যাসিঙ্ক্রোনাস আইডিয়ামগুলিকে আরও সুবিধাজনক করে তোলে এবং ইভেন্ট লুপকে সংহত করে।

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

  • রুবি এবং পিএইচপি এগুলি সঠিকভাবে রোস্ট করার জন্য আমি যথেষ্ট পরিমাণে জানি না।

সংক্ষিপ্তসার হিসাবে: এর মধ্যে কয়েকটি ভাষার মৌলিক নকশার সিদ্ধান্ত রয়েছে যা বহুগঠিতকরণকে অবাঞ্ছিত বা অসম্ভব করে তোলে, যার ফলে করোটাইনগুলির মতো বিকল্পগুলিতে এবং অ্যাসিঙ্ক প্রোগ্রামিংকে আরও সুবিধাজনক করার উপায়গুলিতে আরও দৃ focus় মনোযোগ দেওয়া যায়।

অবশেষে, আসুন করোটাইন এবং থ্রেডের মধ্যে পার্থক্য সম্পর্কে কথা বলি:

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

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

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

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


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

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

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

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

7

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

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

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


4
তবে কর্টাইনগুলি ওএস পরিচালিত হয় না। সি ++ ফাইবারের বিপরীতে ওএস কোনও
কর্টিন

অনেকগুলি ওএসের কর্টিন থাকে।
Jörg ডব্লু মিটাগ

পাইথন এবং জাভাস্ক্রিপ্ট ES6 + এর মতো কর্টিনগুলি যদিও মাল্টিপ্রসেস নয়? কীভাবে তারা কার্য সমান্তরালতা অর্জন করতে পারে?
WHN

1
@ মেল কর্টাইনগুলির সাম্প্রতিক "পুনর্জীবন" পাইথন এবং জাভাস্ক্রিপ্ট থেকে এসেছে, দু'টিই আমার বোঝার সাথে সাথে তাদের কর্টিনগুলির সাথে সমান্তরালতা অর্জন করে না। তার মানে এই উত্তরটি ভুল, কারণ টাস্ক পার্লান্সিজম কারণটি কর্টাইনগুলি একেবারে "পিছনে" নেই are এছাড়াও লুয়াস হয় না মাল্টিপ্রসেস? সম্পাদনা: আমি কেবল বুঝতে পেরেছিলাম যে আপনি সমান্তরালতার কথা বলছেন না, তবে কেন আপনি আমাকে প্রথমে উত্তর দিয়েছেন? ড্লাসলকে জবাব দিন, যেহেতু স্পষ্টত তারা এ সম্পর্কে ভুল।
WHN

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

5

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

থ্রেডগুলি পরে গ্রহণ শুরু করেছিল কারণ, 70 বা 80 এর দশকে সমস্ত গুরুতর অপারেটিং সিস্টেমগুলি তাদের সমর্থন করেছিল (এবং, 90 এর দশকে এমনকি উইন্ডোজ!) এবং তারা আরও সাধারণ're এবং এগুলি ব্যবহার করা সহজ। হঠাৎ সকলেই ভাবেন থ্রেডগুলি পরবর্তী বড় জিনিস।

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

  1. তারা প্রচুর সংস্থান গ্রহণ করে
  2. কনটেক্সট সুইচগুলি অনেক সময় নেয়, তুলনামূলকভাবে কথা বলে এবং প্রায়শই অপ্রয়োজনীয় হয়
  3. তারা রেফারেন্স লোকেশন ধ্বংস
  4. সঠিক কোড লেখা যা একাধিক সংস্থানকে সমন্বয় করে যা একচেটিয়া অ্যাক্সেসের প্রয়োজন হতে পারে অপ্রত্যাশিতভাবে কঠিন

সময়ের সাথে সাথে, কর্মসূচির সংখ্যা সাধারণত যে কোন সময় হেসে দ্রুত সম্পাদন করা দরকার, উপরের (1) এবং (2) এর ফলে সমস্যাগুলি বাড়িয়ে তুলছে। প্রসেসরের গতি এবং মেমরি অ্যাক্সেসের সময়ের মধ্যে বৈষম্য বাড়ছে, সমস্যা বাড়িয়ে তুলছে (3)। এবং প্রোগ্রামগুলির জটিলতা কতগুলি এবং কী ধরণের সংস্থান প্রয়োজন তাদের ক্রমবর্ধমান, সমস্যাটির প্রাসঙ্গিকতা বাড়িয়ে তুলছে (4)।

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

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

5

মুখবন্ধ

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

আধুনিক ব্যবহার (তারা কেন ফিরে এসেছে)

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

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

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

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

আধুনিক উদাহরণ

জাভাস্ক্রীপ্ট, অ্যাপ্লিকেশন Lua, সি # এবং পাইথন মত ভাষায় Coroutines সমস্ত পৃথক ফাংশন দ্বারা তাদের বাস্তবায়নের আহরণ ছোড় অন্যান্য ফাংশন মূল থ্রেড (সঞ্চালক ব্যবস্থা কল সঙ্গে কিছুই করার) এর নিয়ন্ত্রণ।

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

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

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

সম্পাদনা 2: যেহেতু কেউ ভেবেছিল আমি সি # টাস্ক ভিত্তিক সিস্টেমের বিষয়ে কথা বলছি, আমি তা ছিল না। আমি Unক্যের সিস্টেম এবং নিষ্পাপ সি # বাস্তবায়ন সম্পর্কে বলছিলাম


@ টি.এসআর আমি কখনই বলিনি যে সি # এর কোনও "প্রাকৃতিক" কর্টিন ছিল, না সি ++ (কোনও পরিবর্তন হতে পারে) না অজগর (এবং এটি এখনও রয়েছে) না, এবং তিনটিই সহ রুটিন বাস্তবায়ন করেছে। তবে কর্টিনগুলির সমস্ত সি # বাস্তবায়ন (unityক্যের মতো) যেমনটি আমি বর্ণনা করেছি ফলন বন্ধ করে দেওয়া হয়েছে। এছাড়াও আপনার এখানে "হ্যাক" এর ব্যবহার অর্থহীন, আমি অনুমান করি প্রতিটি প্রোগ্রাম হ্যাক কারণ এটি ভাষাতে সর্বদা সংজ্ঞায়িত হয়নি। আমি কোনওভাবেই সি # "টাস্ক ভিত্তিক সিস্টেম" কোনও কিছুর সাথে মিশ্রিত করছি না, আমি এটি উল্লেখও করিনি।
WHN

আমি আপনার উত্তরটি আরও কিছুটা পরিষ্কার করার পরামর্শ দেব। সি # এর অপেক্ষার নির্দেশনা এবং একটি টাস্ক-ভিত্তিক সমান্তরালতা ব্যবস্থা উভয় ধারণা রয়েছে - সি # ব্যবহার করে এবং এই শব্দগুলি পাইথনকে সত্যিকারের সমান্তরাল কীভাবে সত্যিকারের সমান্তরাল করে না সে সম্পর্কে উদাহরণ দেওয়ার সময় প্রচুর কঠিন বিভ্রান্তি সৃষ্টি করতে পারে। এছাড়াও, আপনার প্রথম বাক্যটি সরিয়ে ফেলুন - এটির মতো উত্তরে অন্য ব্যবহারকারীদের উপর সরাসরি আক্রমণ করার জন্য বিনা পন্থা।
টি। সর - মনিকা পুনরায়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.