কর্টিনগুলির বেশিরভাগ ভিত্তি 60s / 70 এর দশকে ঘটেছিল এবং তারপরে বিকল্পগুলির পক্ষে বন্ধ হয়ে যায় (যেমন, থ্রেড)
অজগর এবং অন্যান্য ভাষায় সংঘটিত কর্টিনগুলিতে নতুনভাবে আগ্রহের কোনও পদার্থ রয়েছে কি?
কর্টিনগুলির বেশিরভাগ ভিত্তি 60s / 70 এর দশকে ঘটেছিল এবং তারপরে বিকল্পগুলির পক্ষে বন্ধ হয়ে যায় (যেমন, থ্রেড)
অজগর এবং অন্যান্য ভাষায় সংঘটিত কর্টিনগুলিতে নতুনভাবে আগ্রহের কোনও পদার্থ রয়েছে কি?
উত্তর:
কর্টাইনগুলি কখনও ছেড়ে যায় না, এর মধ্যে এগুলি কেবল অন্য জিনিসগুলির দ্বারা ছড়িয়ে পড়ে। অ্যাসিক্রোনাস প্রোগ্রামিং এবং তাই কর্টিনগুলির প্রতি সম্প্রতি বর্ধিত আগ্রহ মূলত তিনটি কারণের কারণে: ক্রিয়ামূলক ক্রিয়াকলাপ কৌশলগুলির গ্রহণযোগ্যতা বৃদ্ধি, সত্য সমান্তরালতার (জাভাস্ক্রিপ্ট! পাইথন!) দরিদ্র সমর্থন সহ টুলসেট এবং সর্বাগ্রে: থ্রেড এবং করাউটিনগুলির মধ্যে বিভিন্ন ট্রেড অফ। কিছু ব্যবহারের ক্ষেত্রে, কর্টাইনগুলি উদ্দেশ্যমূলকভাবে আরও ভাল।
80, 90 এর দশকের বৃহত্তম প্রোগ্রামিংয়ের দৃষ্টান্তগুলির একটি এবং ওওপি। যদি আমরা ওওপির ইতিহাস এবং বিশেষত সিমুলা ভাষার বিকাশের দিকে লক্ষ্য করি তবে আমরা দেখতে পাই যে শ্রেণিবদ্ধগুলি কর্টাইনগুলির বাইরে বিবর্তিত হয়েছিল। সিমুলা বিচ্ছিন্ন ঘটনাবলী সহ সিস্টেমগুলির অনুকরণের উদ্দেশ্যে তৈরি হয়েছিল। সিস্টেমের প্রতিটি উপাদান একটি পৃথক প্রক্রিয়া ছিল যা একটি সিমুলেশন পদক্ষেপের সময়কালের জন্য ইভেন্টগুলির প্রতিক্রিয়া হিসাবে কার্যকর করা হত, তারপরে অন্যান্য প্রক্রিয়াগুলি তাদের কাজ করতে দেয় yield সিমুলা 67 67-এর বিকাশের সময় শ্রেণিক ধারণাটি চালু হয়েছিল। এখন কর্টিনের অবিরাম স্থিতি অবজেক্টের সদস্যদের মধ্যে সংরক্ষণ করা হয় এবং কোনও পদ্ধতি কল করে ঘটনাগুলি ট্রিগার করা হয়। আরও তথ্যের জন্য, কাগজটি পড়া বিবেচনা করুন নাইগার্ড এবং ডাহল দ্বারা সিমুলা ভাষার বিকাশ ।
সুতরাং একটি মজার মোড়ের মধ্যে আমরা কর্টাইনগুলি সমস্ত বরাবর ব্যবহার করে আসছি, আমরা কেবল তাদের বস্তু এবং ইভেন্ট-চালিত প্রোগ্রামিং বলছিলাম।
সমান্তরালতার ক্ষেত্রে শ্রদ্ধার সাথে দুটি ধরণের ভাষা রয়েছে: যাঁদের একটি সঠিক স্মৃতি মডেল রয়েছে এবং যা সেগুলি নয়। একটি মেমোরি মডেল "যদি আমি কোনও ভেরিয়েবলটিতে লিখি এবং তার পরে অন্য থ্রেডে সেই পরিবর্তনশীলটি পড়ি, এমন জিনিসগুলি নিয়ে আলোচনা করে, আমি কী পুরানো মান বা নতুন মান বা সম্ভবত একটি অবৈধ মান দেখতে পাচ্ছি? 'এর আগে' এবং 'পরে' অর্থ কী? কোন অপারেশনগুলি পরমাণু হওয়ার নিশ্চয়তা রয়েছে? "
একটি ভাল মেমরির মডেল তৈরি করা কঠিন, সুতরাং এই প্রচেষ্টাটি কেবল এই অনির্দিষ্ট, বাস্তবায়ন-সংজ্ঞায়িত গতিশীল ওপেন সোর্স ভাষাগুলির জন্য কখনও করা হয়নি: পার্ল, জাভাস্ক্রিপ্ট, পাইথন, রুবি, পিএইচপি। অবশ্যই, সেগুলির সমস্ত ভাষা মূলত "স্ক্রিপ্টিং" এর চেয়ে অনেক বেশি বিকশিত হয়েছিল for ঠিক আছে, এগুলির কয়েকটি ভাষার কোনও ধরণের মেমরি মডেল নথি রয়েছে তবে সেগুলি পর্যাপ্ত নয়। পরিবর্তে, আমাদের হ্যাকগুলি রয়েছে:
পার্ল থ্রেডিং সমর্থন সহ সংকলন করা যায়, তবে প্রতিটি থ্রেডে সম্পূর্ণ দোভাষী দের একটি পৃথক ক্লোন থাকে যা থ্রেডগুলি প্রতিরোধমূলক ব্যয়বহুল করে তোলে। একমাত্র উপকার হিসাবে, এই ভাগ করে নেওয়া-সংক্রান্ত কিছুই ডেটা রেস এড়ায় না এবং প্রোগ্রামারগুলিকে কেবল সারি / সংকেত / আইপিসির মাধ্যমে যোগাযোগ করতে বাধ্য করে। পার্সের অ্যাসিঙ্ক প্রক্রিয়াজাতকরণের জন্য শক্তিশালী গল্প নেই।
জাভাস্ক্রিপ্টের সবসময় ফাংশনাল প্রোগ্রামিংয়ের জন্য সমৃদ্ধ সমর্থন রয়েছে, তাই প্রোগ্রামাররা ম্যানুয়ালি তাদের প্রোগ্রামগুলিতে ক্রমাগততা / কলব্যাকগুলি এনকোড করে যেখানে তাদের অ্যাসিনক্রোনাস অপারেশনগুলির প্রয়োজন। উদাহরণস্বরূপ, Ajax অনুরোধ বা অ্যানিমেশন বিলম্বের সাথে। যেহেতু ওয়েবটি সহজাতভাবে অ্যাসিঙ্ক, তাই অনেকগুলি অ্যাসিঙ্ক জাভাস্ক্রিপ্ট কোড রয়েছে এবং এই সমস্ত কলব্যাক পরিচালনা করা অত্যন্ত বেদনাদায়ক। সুতরাং আমরা সেই কলব্যাকগুলি আরও ভালভাবে সাজানোর (প্রতিশ্রুতি) বা তাদের পুরোপুরি নির্মূল করার জন্য অনেক প্রচেষ্টা দেখতে পাচ্ছি।
পাইথনের এই দুর্ভাগ্যজনক বৈশিষ্ট্যটি গ্লোবাল ইন্টারপ্রেটার লক নামে পরিচিত। মূলত পাইথন মেমরির মডেলটি হ'ল "সমস্ত প্রভাব ক্রমান্বয়ে প্রদর্শিত হয় কারণ কোনও সমান্তরালতা নেই। এক সময় কেবল একটি থ্রেড পাইথন কোড চালাবে ”" তাই পাইথনের থ্রেড থাকলেও এগুলি কেবল কর্টিনগুলির মতোই শক্তিশালী। [1] পাইথন এর সাহায্যে জেনারেটর ফাংশনগুলির মাধ্যমে অনেকগুলি কর্টিনগুলিকে এনকোড করতে পারে yield
। যদি সঠিকভাবে ব্যবহার করা হয় তবে এটি একা জাভাস্ক্রিপ্ট থেকে পরিচিত কলব্যাক হেল্কের বেশিরভাগ অংশ এড়াতে পারে। পাইথন ৩.৫-এর অতি সাম্প্রতিক অ্যাসিঙ্ক / অপেক্ষার সিস্টেমটি পাইথনে অ্যাসিঙ্ক্রোনাস আইডিয়ামগুলিকে আরও সুবিধাজনক করে তোলে এবং ইভেন্ট লুপকে সংহত করে।
[1]: প্রযুক্তিগতভাবে এই বিধিনিষেধগুলি কেবল পাইথন, পাইথন রেফারেন্স প্রয়োগের ক্ষেত্রে প্রযোজ্য। জাইথনের মতো অন্যান্য বাস্তবায়ন প্রকৃত থ্রেডগুলি সরবরাহ করে যা সমান্তরালভাবে সম্পাদন করতে পারে তবে সমমানের আচরণটি বাস্তবায়নের জন্য দুর্দান্ত দৈর্ঘ্য পার করতে হবে। মূলত: প্রতিটি পরিবর্তনশীল বা অবজেক্টের সদস্য একটি উদ্বায়ী ভেরিয়েবল যাতে সমস্ত পরিবর্তনগুলি পারমাণবিক হয় এবং অবিলম্বে সমস্ত থ্রেডে দেখা যায়। অবশ্যই, উদ্বায়ী ভেরিয়েবলগুলি ব্যবহার করা সাধারণ ভেরিয়েবলগুলি ব্যবহার করার চেয়ে অনেক বেশি ব্যয়বহুল।
রুবি এবং পিএইচপি এগুলি সঠিকভাবে রোস্ট করার জন্য আমি যথেষ্ট পরিমাণে জানি না।
সংক্ষিপ্তসার হিসাবে: এর মধ্যে কয়েকটি ভাষার মৌলিক নকশার সিদ্ধান্ত রয়েছে যা বহুগঠিতকরণকে অবাঞ্ছিত বা অসম্ভব করে তোলে, যার ফলে করোটাইনগুলির মতো বিকল্পগুলিতে এবং অ্যাসিঙ্ক প্রোগ্রামিংকে আরও সুবিধাজনক করার উপায়গুলিতে আরও দৃ focus় মনোযোগ দেওয়া যায়।
অবশেষে, আসুন করোটাইন এবং থ্রেডের মধ্যে পার্থক্য সম্পর্কে কথা বলি:
থ্রেডগুলি মূলত প্রক্রিয়াগুলির মতো, প্রক্রিয়াটির একাধিক থ্রেড বাদে মেমরির জায়গাগুলি ভাগ করে। এর অর্থ মেমরির ক্ষেত্রে থ্রেডগুলি কোনওভাবেই "হালকা ওজন" নয়। অপারেটিং সিস্টেম দ্বারা থ্রেডগুলি প্রাক-শূন্যতার সাথে নির্ধারিত। এর অর্থ টাস্ক সুইচগুলির উচ্চ ওভারহেড থাকে এবং অসুবিধাগ্রস্থ সময়ে হতে পারে। এই ওভারহেডের দুটি উপাদান রয়েছে: থ্রেডের স্থিতি স্থগিতকরণের ব্যয় এবং ব্যবহারকারী মোডের (সুইডারের জন্য) কার্নেল মোডের (শিডিয়ুলারের জন্য) বিনিময় ব্যয়।
যদি কোনও প্রক্রিয়া তার নিজস্ব থ্রেডগুলি সরাসরি এবং সহযোগিতামূলকভাবে নির্ধারণ করে, কার্নেল মোডে প্রসঙ্গের স্যুইচ অপ্রয়োজনীয়, এবং স্যুইচিং কার্যগুলি অপ্রত্যক্ষ ফাংশন কলের তুলনায় তুলনামূলকভাবে ব্যয়বহুল, যেমন: বেশ সস্তা। এই হালকা ওজনের থ্রেডগুলিকে বিভিন্ন বিবরণের উপর নির্ভর করে সবুজ থ্রেড, ফাইবার বা করাউটিন বলা যেতে পারে। সবুজ থ্রেড / ফাইবারের উল্লেখযোগ্য ব্যবহারকারীরা প্রাথমিকভাবে জাভা বাস্তবায়ন করেছিলেন এবং আরও সম্প্রতি গোলাংয়ের গোরটাইনস। করোটাইনগুলির একটি ধারণাগত সুবিধা হ'ল তাদের সম্পাদন নিয়ন্ত্রণ প্রবাহের ক্ষেত্রে বোঝা যায় যে স্পষ্টভাবে কর্টাইনগুলির মধ্যে পিছনে পিছনে চলে যাচ্ছে। যাইহোক, এই কর্টিনগুলি একাধিক ওএস থ্রেডের মধ্যে নির্ধারিত না হলে সত্য সমান্তরালতা অর্জন করে না।
সস্তা কর্টিনগুলি কোথায় দরকারী? বেশিরভাগ সফ্টওয়্যারের জন্য গাজিলিয়ন থ্রেডের প্রয়োজন হয় না, তাই সাধারণ ব্যয়বহুল থ্রেডগুলি সাধারণত ঠিক থাকে। যাইহোক, অ্যাসিঙ্ক প্রোগ্রামিং কখনও কখনও আপনার কোড সহজ করতে পারে। অবাধে ব্যবহার করতে, এই বিমূর্ততা যথেষ্ট সস্তা হতে হবে।
এবং তারপরে ওয়েব আছে। উপরে উল্লিখিত হিসাবে, ওয়েব সহজাতভাবে অ্যাসিনক্রোনাস। নেটওয়ার্ক অনুরোধগুলি কেবল দীর্ঘ সময় নেয়। অনেক ওয়েব সার্ভার কর্মী থ্রেডে পূর্ণ একটি থ্রেড পুল বজায় রাখে। যাইহোক, তাদের বেশিরভাগ সময় এই থ্রেডগুলি অলস হয়ে থাকবে কারণ তারা কোনও সংস্থার জন্য অপেক্ষা করছে, ডিস্ক থেকে কোনও ফাইল লোড করার সময় আই / ও ইভেন্টের অপেক্ষা করা, ক্লায়েন্ট প্রতিক্রিয়ার অংশটি স্বীকার না করা পর্যন্ত অপেক্ষা করে, বা কোনও ডাটাবেস পর্যন্ত অপেক্ষা করে কোয়েরি সম্পূর্ণ। নোডজেএস অসাধারণভাবে প্রমাণ করেছে যে একটি ফলস্বরূপ ইভেন্ট ভিত্তিক এবং অ্যাসিনক্রোনাস সার্ভার নকশা অত্যন্ত ভালভাবে কাজ করে। স্পষ্টতই জাভাস্ক্রিপ্ট ওয়েব অ্যাপ্লিকেশনগুলির জন্য ব্যবহৃত একমাত্র ভাষা থেকে অনেক দূরে, সুতরাং অন্যান্য ভাষার জন্য (পাইথন এবং সি # তে লক্ষণীয়) অ্যাসিঙ্ক্রোনাস ওয়েব প্রোগ্রামিংটিকে আরও সহজ করার জন্য আরও একটি বড় উত্সাহ রয়েছে।
অপারেটিং সিস্টেমগুলি প্রাক-শূণ্য সময়সূচীটি সম্পাদন করে না বলে কর্টিনগুলি কার্যকর ছিল । একবার যখন তারা প্রাক-উদ্দীপক সময়সূচী সরবরাহ শুরু করে, আপনার প্রোগ্রামে পর্যায়ক্রমে নিয়ন্ত্রণ ত্যাগ করা আর প্রয়োজন ছিল না।
মাল্টি-কোর প্রসেসরগুলি আরও প্রচলিত হয়ে ওঠার সাথে সাথে কর্টিনগুলি টাস্কের সমান্তরালতা অর্জন করতে এবং / অথবা একটি সিস্টেমের ব্যবহার উচ্চতর রাখতে ব্যবহার করা হয় (যখন মৃত্যুর এক থ্রেড অবশ্যই কোনও উত্সে অপেক্ষা করতে হবে, অন্যটি তার জায়গায় চলতে শুরু করতে পারে)।
নোডজেএস একটি বিশেষ কেস, যেখানে কর্টাইনগুলি আইওতে সমান্তরাল অ্যাক্সেস পেতে ব্যবহৃত হয়। অর্থাৎ, একাধিক থ্রেড আইও অনুরোধগুলি পরিবেশন করতে ব্যবহৃত হয় তবে জাভাস্ক্রিপ্ট কোডটি কার্যকর করতে একটি একক থ্রেড ব্যবহৃত হয়। একটি সাইনেল থ্রেডে ব্যবহারকারীর কোডটি কার্যকর করার উদ্দেশ্যটি হ'ল মিটেক্সেস ব্যবহারের প্রয়োজনীয়তা এড়ানো। এটি উপরে বর্ণিত হিসাবে সিস্টেমের ব্যবহার উচ্চতর রাখার চেষ্টা করার বিভাগের অধীনে চলে আসে।
প্রারম্ভিক সিস্টেমগুলি প্রাথমিকভাবে সম্মতি প্রদানের জন্য করোটাইনগুলি ব্যবহার করে কারণ তারা এটি করার সহজতম উপায়। থ্রেডগুলিকে অপারেটিং সিস্টেম থেকে পর্যাপ্ত পরিমাণ সমর্থন প্রয়োজন (আপনি তাদের ব্যবহারকারীর পর্যায়ে প্রয়োগ করতে পারেন, তবে আপনার প্রক্রিয়াটি নিয়মিতভাবে আপনার প্রক্রিয়াটিতে বাধাগ্রস্থ করার জন্য আপনাকে কিছু ব্যবস্থা করার প্রয়োজন হবে) এবং আপনার সমর্থন থাকা সত্ত্বেও বাস্তবায়ন করা আরও কঠিন ।
থ্রেডগুলি পরে গ্রহণ শুরু করেছিল কারণ, 70 বা 80 এর দশকে সমস্ত গুরুতর অপারেটিং সিস্টেমগুলি তাদের সমর্থন করেছিল (এবং, 90 এর দশকে এমনকি উইন্ডোজ!) এবং তারা আরও সাধারণ're এবং এগুলি ব্যবহার করা সহজ। হঠাৎ সকলেই ভাবেন থ্রেডগুলি পরবর্তী বড় জিনিস।
নব্বইয়ের দশকের শেষের দিকে ফাটল দেখা দিতে শুরু করেছিল এবং 2000 এর দশকের গোড়ার দিকে এটি স্পষ্ট হয়ে গিয়েছিল যে থ্রেডগুলির সাথে গুরুতর সমস্যা রয়েছে:
সময়ের সাথে সাথে, কর্মসূচির সংখ্যা সাধারণত যে কোন সময় হেসে দ্রুত সম্পাদন করা দরকার, উপরের (1) এবং (2) এর ফলে সমস্যাগুলি বাড়িয়ে তুলছে। প্রসেসরের গতি এবং মেমরি অ্যাক্সেসের সময়ের মধ্যে বৈষম্য বাড়ছে, সমস্যা বাড়িয়ে তুলছে (3)। এবং প্রোগ্রামগুলির জটিলতা কতগুলি এবং কী ধরণের সংস্থান প্রয়োজন তাদের ক্রমবর্ধমান, সমস্যাটির প্রাসঙ্গিকতা বাড়িয়ে তুলছে (4)।
তবে কিছুটা সাধারণতা হারিয়ে, এবং প্রোগ্রামারগুলিতে কীভাবে তাদের প্রক্রিয়াগুলি একসাথে পরিচালনা করতে পারে তা চিন্তা করার জন্য কিছুটা বাড়তি কৌতুক চাপিয়ে দিয়ে কর্টাইনগুলি এই সমস্ত সমস্যার সমাধান করতে পারে।
আমি কর্টিনগুলি পুনরুত্থান, সমান্তরালতা পাচ্ছে না তার কারণ উল্লেখ করে শুরু করতে চাই । সাধারণ আধুনিক কর্টিনগুলি কার্য ভিত্তিক সমান্তরালতা অর্জনের মাধ্যম নয় , কারণ আধুনিক বাস্তবায়নগুলি মাল্টিপ্রসেসিং কার্যকারিতা ব্যবহার করে না। আপনি যে নিকটতম জিনিসটি পান এটি হ'ল ফাইবারের মতো জিনিস ।
আধুনিক কর্টাইনগুলি অলস মূল্যায়ন অর্জনের উপায় হিসাবে এসেছে, হ্যাস্কেলের মতো কার্যকরী ভাষায় খুব দরকারী, যেখানে কোনও অপারেশন করার জন্য পুরো সেটটি পুনরাবৃত্তি করার পরিবর্তে, আপনি কেবলমাত্র অপারেশন কেবল মূল্যায়ন করতে সক্ষম হবেন (প্রয়োজন হিসাবে) আইটেমের অসীম সেট বা অন্যথায় প্রারম্ভিক সমাপ্তি এবং উপসেট সহ বড় সেটগুলির জন্য ব্যবহারযোগ্য।
আধুনিক প্রয়োগে পাইথন এবং সি #, করোটাইনগুলির মতো ভাষায় জেনারেটর তৈরি করতে (যা নিজেরাই অলস মূল্যায়নের প্রয়োজনের অংশটি পূরণ করে) জন্য ফলন কীওয়ার্ড ব্যবহার করে, কেবলমাত্র ভাষাতেই বিশেষ বাক্য গঠন সহ সম্ভব ছিল না possible (যদিও পাইথন অবশেষে সাহায্যের জন্য কয়েকটি বিট যোগ করেছে)। কো-রুটিন এর ধারণা সঙ্গে অলস evaulation সাহায্যের ভবিষ্যৎ গুলি যেখানে আপনি যে সময়ে একটি ভেরিয়েবলের মান প্রয়োজন হবে না, আপনি আসলে এটা অর্জন না হওয়া পর্যন্ত আপনি স্পষ্টভাবে যে মান জন্য অনুরোধ পিছে যেতে (আপনি মান ব্যবহার করতে সক্ষম হবেন এবং অলসভাবে তা ইনস্ট্যান্টেশনের চেয়ে আলাদা সময়ে মূল্যায়ন করুন )।
অলস মূল্যায়নের বাইরে, যদিও, বিশেষত ওয়েবস্পিয়ারে, এই সহ রুটিনগুলি কলব্যাক হেল্ক ঠিক করতে সহায়তা করে । কর্টিনগুলি ডাটাবেস অ্যাক্সেস, অনলাইন লেনদেন, ইউআই ইত্যাদিতে দরকারী হয়ে ওঠে যেখানে ক্লায়েন্ট মেশিনে প্রক্রিয়াজাতকরণের সময় নিজেই যা প্রয়োজন তা দ্রুত অ্যাক্সেসের ফলশ্রুতিতে আসে না। থ্রেডিং একই জিনিসটি পুরোপুরি পূরণ করতে পারে তবে এই ক্ষেত্রটিতে আরও অনেক বেশি ওভারহেড প্রয়োজন, এবং করোটাইনগুলির বিপরীতে, কার্য টানা সমান্তরালতার জন্য কার্যত কার্যকর ।
সংক্ষেপে, ওয়েব বিকাশ যেমন বৃদ্ধি পেয়েছে এবং কার্যকরী দৃষ্টান্তগুলি অত্যাবশ্যকীয় ভাষার সাথে আরও একত্রিত হয়, তত্ক্ষণাত্ সমস্যা এবং অলস মূল্যায়নের সমাধান হিসাবে কর্টিনগুলি এসেছে। কর্টাইনগুলি এমন জায়গাগুলিতে আসে যেখানে মাল্টিপ্রসেস থ্রেডিং এবং সাধারণভাবে থ্রেডিং হয় অপ্রয়োজনীয়, অসুবিধে বা সম্ভব নয় not
জাভাস্ক্রীপ্ট, অ্যাপ্লিকেশন Lua, সি # এবং পাইথন মত ভাষায় Coroutines সমস্ত পৃথক ফাংশন দ্বারা তাদের বাস্তবায়নের আহরণ ছোড় অন্যান্য ফাংশন মূল থ্রেড (সঞ্চালক ব্যবস্থা কল সঙ্গে কিছুই করার) এর নিয়ন্ত্রণ।
ইন এই পাইথন উদাহরণ , আমরা কিছু বলা সঙ্গে একটি মজার পাইথন ফাংশন আছে await
এর ভিতরে। এটি মূলত একটি ফলন, যা কার্যকরভাবে ফলন loop
দেয় যা তারপরে একটি পৃথক ফাংশন চালানোর অনুমতি দেয় (এই ক্ষেত্রে, একটি পৃথক factorial
ফাংশন)। মনে রাখবেন যে যখন এটি "কাজগুলির সমান্তরাল সম্পাদন" বলে যা একটি মিসনোমার, এটি আসলে সমান্তরালভাবে সম্পাদন করে না, প্রতীক্ষিত কীওয়ার্ড ব্যবহারের মাধ্যমে এর ইন্টারলেভেভিং ফাংশন এক্সিকিউশন (যা মনে রাখে কেবল একটি বিশেষ ধরণের ফলন হয়)
তারা একক, অ সমান্তরাল, একযোগে প্রসেসের জন্য নিয়ন্ত্রণের ফলন দেয় যা কার্য সমান্তরাল নয় , এই অর্থে যে এই কাজগুলি একই সাথে কখনও পরিচালনা করে না । আধুনিক ভাষা প্রয়োগের ক্ষেত্রে কর্টাইনগুলি থ্রেড নয় । কো রুটিনগুলির এই সমস্ত ভাষা বাস্তবায়ন এই ফাংশন উত্পাদ কলগুলি থেকে উদ্ভূত হয়েছে (যা আপনি প্রোগ্রামারকে আসলে আপনার সহ রুটিনগুলিতে ম্যানুয়ালি রেখে দিতে হবে)।
সম্পাদনা করুন: সি ++ বুস্ট কর্টাইন 2 একইভাবে কাজ করে এবং তার ব্যাখ্যাটি আমি ইয়েলডদের সাথে কী বলছি তার আরও ভাল দৃশ্য দেওয়া উচিত, এখানে দেখুন । আপনি দেখতে পাচ্ছেন, বাস্তবায়নের সাথে কোনও "বিশেষ ক্ষেত্রে" নেই, বুস্ট ফাইবারের মতো জিনিসগুলি নিয়মের ব্যতিক্রম এবং তারপরেও সুস্পষ্ট সিঙ্ক্রোনাইজেশন প্রয়োজন।
সম্পাদনা 2: যেহেতু কেউ ভেবেছিল আমি সি # টাস্ক ভিত্তিক সিস্টেমের বিষয়ে কথা বলছি, আমি তা ছিল না। আমি Unক্যের সিস্টেম এবং নিষ্পাপ সি # বাস্তবায়ন সম্পর্কে বলছিলাম