কর্টিন কী? তারা কীভাবে সামঞ্জস্যের সাথে সম্পর্কিত?
কর্টিন কী? তারা কীভাবে সামঞ্জস্যের সাথে সম্পর্কিত?
উত্তর:
Coroutines এবং একযোগে মুদ্রা মূলত orthogonal হয়। কর্টাইনগুলি একটি সাধারণ নিয়ন্ত্রণ কাঠামো যার মাধ্যমে প্রবাহ নিয়ন্ত্রণটি সমবায়ভাবে দুটি ভিন্ন রুটিনের মধ্যে ফিরে না এসে পার হয়ে যায়।
পাইথনে 'ফলন' বিবৃতি একটি ভাল উদাহরণ। এটি একটি কর্টিন তৈরি করে। যখন 'ফলন' মুখোমুখি হয় তখন ফাংশনটির বর্তমান অবস্থা সংরক্ষণ করা হয় এবং নিয়ন্ত্রণটি কলিং ফাংশনে ফিরে আসে। কলিং ফাংশন তারপরে এক্সিকিউশনটিকে ফলন ফাংশনে ফিরিয়ে স্থানান্তর করতে পারে এবং তার রাজ্যটি সেই স্থানে পুনরুদ্ধার করা হবে যেখানে 'ফলন' হয়েছিল এবং কার্যকর করা অব্যাহত থাকবে।
Coroutines are a general control structure whereby flow control is cooperatively passed between two different routines without returning.
<- এই হল সম্পাতবিন্দু। আপনি যে শব্দটির সন্ধান করছেন তা সমান্তরালতা।
orthogonal = Not similar to each other
?
orthogonal
অর্থ "একে অপরের থেকে স্বতন্ত্র"।
লুয়াতে প্রোগ্রামিং থেকে " Coroutines
" বিভাগ:
একটি কর্টিন একটি থ্রেডের সমান (মাল্টিথ্রেডিংয়ের অর্থে): এটি কার্যকর করার একটি লাইন, যার নিজস্ব স্ট্যাক, নিজস্ব স্থানীয় ভেরিয়েবল এবং নিজস্ব নির্দেশিকা নির্দেশক; তবে এটি বিশ্বব্যাপী ভেরিয়েবল এবং অন্যান্য কর্টিনগুলির সাথে বেশিরভাগ কিছু ভাগ করে। থ্রেড এবং করোটিনগুলির মধ্যে প্রধান পার্থক্যটি হ'ল, ধারণাগতভাবে (বা আক্ষরিকভাবে, একটি মাল্টিপ্রসেসর মেশিনে), থ্রেড সহ একটি প্রোগ্রাম সমান্তরালভাবে কয়েকটি থ্রেড চালায়। অন্যদিকে, কর্টাইনগুলি সহযোগিতামূলক: যে কোনও সময়, কাউরটাইন সহ একটি প্রোগ্রাম তার শুধুমাত্র একটি কর্টিন চালাচ্ছে, এবং এই চলমান কোর্টাইন কেবল তখনই তার কার্যাদেশ স্থগিত করে যখন এটি স্পষ্টভাবে স্থগিত করার জন্য অনুরোধ করে।
সুতরাং কথাটি হ'ল: কর্টাইনগুলি "সহযোগী"। এমনকি মাল্টি-কোর সিস্টেমে, যে কোনও সময় কেবলমাত্র একটি কর্টিন চলছে (তবে একাধিক থ্রেড সমান্তরালে চলতে পারে)। করোটিনগুলির মধ্যে অ-প্রাক-প্রাক-সংঘটিত রয়েছে, চলমান কর্টিন অবশ্যই স্পষ্টভাবে কার্যকর করতে হবে।
" concurrency
" এর জন্য, আপনি রব পাইকের স্লাইডটি উল্লেখ করতে পারেন :
কনকুরেন্সি হ'ল স্বাধীনভাবে গণনাগুলির রচনা।
সুতরাং coroutine ক-এর সম্পাদনের সময়, এটা coroutine বি নিয়ন্ত্রণ তারপর কিছু সময় পরে, coroutine বি coroutine উ নিয়ন্ত্রণ ফিরে যেহেতু নেই পাসের পাসের নির্ভরতা , coroutines মধ্যে, এবং তারা টমটম চালানো হবে যাতে দুই coroutines হয় সম্পাতবিন্দু না ।
আমি বেশিরভাগ উত্তরগুলি প্রযুক্তিগত প্রশ্ন হলেও খুব প্রযুক্তিগত বলে মনে করি। কর্টিন প্রক্রিয়াটি বোঝার চেষ্টা করতে আমার বেশ কষ্ট হয়েছিল। আমি এটি পেতে চাই কিন্তু তবে আমি একই সময়ে তা পাই না।
আমি এই উত্তরটি এখানে খুব সহায়ক হিসাবে পেয়েছি:
https://dev.to/thibmaek/explain-coroutines-like-im-five-2d9
ইদান আর্যর উদ্ধৃতি:
আপনার গল্পটি তৈরি করার জন্য, আমি এটিকে এমন কিছু দিয়েছি:
আপনি কার্টুন দেখা শুরু করেন, তবে এটি পরিচিতি। ভূমিকাটি দেখার পরিবর্তে আপনি গেমটিতে স্যুইচ করুন এবং অনলাইন লবিতে প্রবেশ করুন - তবে এটির জন্য 3 জন খেলোয়াড় দরকার এবং কেবল আপনি এবং আপনার বোন এতে রয়েছেন। আপনি যোগ দেওয়ার জন্য অন্য খেলোয়াড়ের অপেক্ষার পরিবর্তে আপনার হোমওয়ার্কে স্যুইচ করুন এবং প্রথম প্রশ্নের উত্তর দিন। দ্বিতীয় প্রশ্নের আপনার দেখার দরকার এমন একটি ইউটিউব ভিডিওর লিঙ্ক রয়েছে। আপনি এটি খুলুন - এবং এটি লোড করা শুরু করে। এটি লোড হওয়ার জন্য অপেক্ষা না করে আপনি কার্টুনে ফিরে যান। পরিচিতি শেষ, আপনি দেখতে পারেন। এখন বিজ্ঞাপন রয়েছে - তবে এর মধ্যেই তৃতীয় খেলোয়াড় যোগ দিয়েছে যাতে আপনি গেমটিতে চলে যান এবং আরও ...
ধারণাটি হ'ল আপনি একবারে সমস্ত কিছু করছেন এমন দেখানোর জন্য আপনি কেবল কার্যগুলি খুব দ্রুত স্যুইচ করবেন না। আপনার প্রত্যক্ষ মনোযোগের প্রয়োজন এমন অন্যান্য কাজ করার জন্য আপনি যখন কিছু হওয়ার (অপর) অপেক্ষা করছেন তার সময়টি আপনি কাজে লাগান।
অবশ্যই লিঙ্কটি চেক করুন, আরও অনেক কিছুই রয়েছে যা আমি সমস্ত কিছু উদ্ধৃত করতে পারি না।
কর্টিন সাব্রোটিন / থ্রেডের সমান। পার্থক্যটি হ'ল একবার একজন কলকারী সাব্রোটিন / থ্রেডগুলি আহ্বান করে, এটি কলারের ফাংশনে আর ফিরে আসবে না। কিন্তু একজন কর্টিন কল কোডার কয়েক অংশের কোডটি কার্যকর করার পরে কলারকে তার নিজস্ব কিছু কোড কার্যকর করতে এবং কর্টিন পয়েন্টে ফিরে যেতে পারে যেখানে এটি কার্যকর করা বন্ধ করে এবং সেখান থেকে চালিয়ে যেতে পারে। অর্থাত। একটি কর্টিনের একাধিক প্রবেশ এবং প্রস্থান পয়েন্ট থাকে
মূলত, দুটি ধরণের Coroutines রয়েছে:
কোটলিন স্ট্যাকলেস কর্টিনগুলি প্রয়োগ করে - এর অর্থ এই যে কর্টিনগুলির নিজস্ব স্ট্যাক নেই, তাই তারা দেশীয় থ্রেডে মানচিত্র রাখেনি।
এই কর্টিন শুরু করার কাজগুলি:
launch{}
async{}
আপনি এখান থেকে আরও শিখতে পারেন:
https://www.kotlindevelopment.com/deep-dive-coroutines/
https://blog.mindorks.com/what-are-coroutines-in-kotlin-bf4fecd476e9
পাইথন কর্টিন থেকে :
পাইথন কর্টিনগুলি সম্পাদন স্থগিত করা যেতে পারে এবং অনেকগুলি স্থানে পুনরায় শুরু করা যেতে পারে (কর্টিন দেখুন)। কোনও কর্টিন ফাংশনের মূল অভ্যন্তরে, অপেক্ষা করুন এবং অ্যাসিঙ্ক সনাক্তকারীরা সংরক্ষিত কীওয়ার্ডে পরিণত হয়; অভিব্যক্তিগুলির জন্য অপেক্ষা করুন, async এর জন্য এবং async কেবলমাত্র কর্টিন ফাংশন বডিগুলিতে ব্যবহার করা যেতে পারে।
Coroutines থেকে (সি ++ 20)
কর্টিন একটি ফাংশন যা পরে আবার শুরু করার জন্য মৃত্যুদন্ড স্থগিত করতে পারে । কর্টাইনগুলি স্ট্যাকলেস: তারা কলারে ফিরে এসে মৃত্যুদণ্ড স্থগিত করে। এটি সিক্যুয়ালি কোডের জন্য অনুমতি দেয় যা অবিচ্ছিন্নভাবে কার্যকর করে (যেমন সুস্পষ্ট কলব্যাক ছাড়াই অ-ব্লকিং I / O পরিচালনা করতে), এবং অলস-গণিত অসীম অনুক্রম এবং অন্যান্য ব্যবহারগুলিতে অ্যালগোরিদমকে সমর্থন করে।
অন্যের উত্তরের সাথে তুলনা করুন:
আমার মতে, পুনরায় শুরু করা অংশটি @ টুইঙ্কলের মতোই মূল পার্থক্য।
যদিও ডকুমেন্টের অনেকগুলি ক্ষেত্র এখনও কাজ চলছে, তবে এই অংশটি @ নান জিয়াও'র বাদে বেশিরভাগ উত্তরের মতো similar
অন্যদিকে, কর্টাইনগুলি সহযোগিতামূলক: যে কোনও সময়, কাউরটাইন সহ একটি প্রোগ্রাম তার শুধুমাত্র একটি কর্টিন চালাচ্ছে, এবং এই চলমান কোর্টাইন কেবল তখনই তার কার্যাদেশ স্থগিত করে যখন এটি স্পষ্টভাবে স্থগিত করার জন্য অনুরোধ করে।
যেহেতু এটি লুয়ার প্রোগ্রাম থেকে উদ্ধৃত হয়েছে, সম্ভবত এটি ভাষা সম্পর্কিত (বর্তমানে লুয়ার সাথে পরিচিত নয়), সমস্ত নথিতে কেবল একটি অংশের উল্লেখ নেই ।
সমসাময়িকের সাথে সম্পর্ক: করোটাইনগুলির
একটি "এক্সিকিউশন" অংশ রয়েছে (সি ++ 20) here এখানে উদ্ধৃতি দেওয়ার পক্ষে খুব দীর্ঘ।
বিশদ ছাড়াও বেশ কয়েকটি রাজ্য রয়েছে।
When a coroutine begins execution
When a coroutine reaches a suspension point
When a coroutine reaches the co_return statement
If the coroutine ends with an uncaught exception
When the coroutine state is destroyed either because it terminated via co_return or uncaught exception, or because it was destroyed via its handle
@ ইউজার 217714 এর উত্তরের আওতায় @ অ্যাডাম আর্লডের মন্তব্য হিসাবে। এটি একমত
তবে এটি মাল্টিথ্রেডিং থেকে আলাদা।
স্টাড :: থ্রেড থেকে
থ্রেড একসাথে একাধিক ফাংশন সম্পাদন করতে দেয়। কনস্ট্রাক্টর আর্গুমেন্ট হিসাবে সরবরাহিত শীর্ষ স্তরের ফাংশন থেকে শুরু করে সম্পর্কিত থ্রেড অবজেক্ট (যে কোনও ওএস নির্ধারিত বিলম্বের জন্য মুলতুবি রয়েছে) নির্মাণের সাথে সাথে থ্রেডগুলি কার্যকরভাবে শুরু হয়। শীর্ষ-স্তরের ফাংশনের রিটার্ন মানটিকে অগ্রাহ্য করা হয় এবং এটি যদি কোনও ব্যতিক্রম ছুঁড়ে দিয়ে শেষ হয় তবে স্টাড :: টার্মিনেট বলা হয়। শীর্ষ স্তরের ফাংশন স্টার :: প্রতিশ্রুতির মাধ্যমে বা কলারের কাছে তার ব্যতিক্রমের সাথে বা একটি ব্যতিক্রমের সাথে যোগাযোগ করতে পারে বা ভাগ করা ভেরিয়েবলগুলি সংশোধন করে (যার জন্য সিঙ্ক্রোনাইজেশন প্রয়োজন হতে পারে, এসটিডি :: মিটেক্স এবং এসটিডি :: পারমাণবিক দেখুন)
যেহেতু এটি সম্মতিযুক্ত নয়, এটি মাল্টিথ্রেডিংয়ের মতো কাজ করে বিশেষত যখন অপ্রয়োজনীয় (ওএস দৃষ্টিকোণ থেকে) অপেক্ষা করা হয়, এ কারণেই এটি বিভ্রান্তিকর।
একটি করোটিন একটি বিশেষ ধরণের সাবপ্রোগ্রাম। কলার এবং প্রচলিত সাবপ্রোগ্রামগুলির সাথে বিদ্যমান একটি উপজাতীয় প্রোগ্রামের মধ্যে যে মাস্টার-স্লেভ সম্পর্ক রয়েছে তার চেয়ে বরং কলার এবং বলা কোরোটিনগুলি আরও ন্যায়সঙ্গত।
কর্টিন একটি উপ-প্রোগ্রাম যা একাধিক এন্ট্রি রাখে এবং সেগুলি নিজেই নিয়ন্ত্রণ করে - লুয়ায় সরাসরি সমর্থিত
যাকে সিমেট্রিক কন্ট্রোল বলা হয়: কলার এবং কল কর্টিনগুলি আরও সমান ভিত্তিতে থাকে
একটি কর্টিন কলকে একটি জীবনবৃত্তির নাম দেওয়া হয়েছে
কর্টিনের প্রথম পুনঃসূচনাটি শুরু হয় তবে কর্টিনে শেষ সম্পাদিত বিবৃতি দেওয়ার ঠিক পরে পরবর্তী কলগুলি বিন্দুতে প্রবেশ করে
কর্টাইনগুলি একে অপরকে পুনরায় শুরু করে, সম্ভবত চিরকালের জন্য
Coroutines প্রোগ্রাম ইউনিট (কর্টিনস) এর পরিমাণ-সমবর্তী বাস্তবায়ন সরবরাহ করে; তাদের ফাঁসি ফাঁকে ফাঁকে ফাঁকে দেওয়া হয় না
আমি এই লিঙ্কটি থেকে একটি ব্যাখ্যা খুঁজে পেতে বেশ সোজা এগিয়ে। এই উত্তরগুলির মধ্যে উত্তরের শেষ বুলেট পয়েন্ট ব্যতীত সামঞ্জস্য বনাম সমান্তরালতা ব্যাখ্যা করার চেষ্টা করা হয়নি ।
কিং আর্মস্ট্রংয়ের "প্রোগ্রামিং এরলং" থেকে উদ্ধৃত , কিংবদন্তি:
একটি সমান্তরাল প্রোগ্রাম একটি সমান্তরাল কম্পিউটারে সম্ভাব্য দ্রুত চলতে পারে।
সমবর্তী প্রোগ্রাম হ'ল একটি প্রোগ্রাম যা সমবর্তী প্রোগ্রামিং ভাষায় লেখা। আমরা পারফরম্যান্স, মাপদণ্ডযোগ্যতা বা ত্রুটি সহনশীলতার কারণে সমবর্তী প্রোগ্রামগুলি লিখি।
একযোগে প্রোগ্রামিং ভাষা এমন একটি ভাষা যা সমবর্তী প্রোগ্রাম লেখার জন্য সুস্পষ্ট ভাষা গঠন করে। এই গঠনগুলি প্রোগ্রামিং ভাষার একটি অবিচ্ছেদ্য অঙ্গ এবং সমস্ত অপারেটিং সিস্টেমে একইভাবে আচরণ করে।
সমান্তরাল কম্পিউটার এমন এক কম্পিউটার যা একই সাথে চলতে পারে বেশ কয়েকটি প্রসেসিং ইউনিট (সিপিইউ বা কোর) has
সুতরাং সমঝোতা সমান্তরালতার মতো নয়। আপনি এখনও একটি একক কোর কম্পিউটারে সমবর্তী প্রোগ্রাম লিখতে পারেন। সময় ভাগ করার সময়সূচী আপনাকে অনুভব করবে যে আপনার প্রোগ্রামটি একই সাথে চলছে running
সমবর্তী প্রোগ্রামের সমান্তরাল কম্পিউটারে সমান্তরালে চলার সম্ভাবনা রয়েছে তবে গ্যারান্টিযুক্ত নয় । আপনার প্রোগ্রামটি চালানোর জন্য ওএস আপনাকে কেবল একটি কোর দিতে পারে।
অতএব, একত্রীকরণ একটি সমবর্তী প্রোগ্রামের একটি সফ্টওয়্যার মডেল যার অর্থ এই নয় যে আপনার প্রোগ্রামটি শারীরিকভাবে সমান্তরালে চলতে পারে।
"কর্টিন" শব্দটি দুটি শব্দ দ্বারা গঠিত: "কো" (সমবায়) এবং "রুটিন" (ফাংশন)।
ক। এটি সম্মতি বা সমান্তরালতা অর্জন করে?
সহজ হতে, আসুন এটি একটি একক কোর কম্পিউটারে আলোচনা করা যাক ।
সংযুক্তি ওএস থেকে সময় শেয়ার করে অর্জন করা হয়। একটি থ্রেড সিপিইউ কোরটিতে তার নির্ধারিত সময় ফ্রেমগুলিতে তার কোডটি কার্যকর করে। এটি ওএস দ্বারা প্রিম্প্ট করা যেতে পারে। এটি ওএসের নিয়ন্ত্রণও পেতে পারে।
অন্যদিকে একটি করোটিন ওএসের সাহায্যে থ্রেডের মধ্যে থাকা অন্য কর্টিনের নিয়ন্ত্রণ দেয়। সুতরাং কোনও থ্রেডের মধ্যে থাকা সমস্ত কর্টিনগুলি এখনও ওএস দ্বারা পরিচালিত অন্যান্য থ্রেডে সিপিইউ কোর সরবরাহ না করেই সেই থ্রেডের জন্য সময়সীমাটি ব্যবহার করে।
অতএব, আপনি ভাবতে পারেন যে কর্টিন সময় ব্যবহারকারীর দ্বারা ওএস (বা অর্ধ-সমান্তরালতা) দ্বারা শেয়ার নয় । Coroutines থ্রেড হিসাবে নির্ধারিত একই কোর উপর চালিত হয় যা সেই কর্টিনগুলি চালায়।
Coroutine সমান্তরালতা অর্জন করতে পারে? যদি এটি সিপিইউ-বাউন্ড কোড হয় তবে না। সময়-ভাগের মতো, এটি আপনাকে মনে করে যে তারা সমান্তরালভাবে চালিত হয় তবে তাদের মৃত্যুদণ্ড কার্যকর করা হয় না a যদি এটি আইও-আবদ্ধ হয়, হ্যাঁ, এটি আপনার কোড দ্বারা নয় হার্ডওয়ার (আইও ডিভাইস) দ্বারা সমান্তরাল অর্জন করে।
খ। ফাংশন কল সঙ্গে পার্থক্য?
ছবিটি যেমন দেখায়, return
নিয়ন্ত্রণ স্যুইচ করার জন্য এটি কল করার প্রয়োজন নেই । এটি ছাড়া ফলন করতে পারেন return
। একটি কর্টাইন বর্তমান ফাংশন ফ্রেমের (স্ট্যাক) স্টেট সংরক্ষণ করে এবং ভাগ করে দেয়। সুতরাং এটি ফাংশনের চেয়ে অনেক বেশি হালকা এবং যেহেতু কল স্ট্যাক স্ট্যাক এবং রিওয়াইন্ড করার জন্য আপনাকে রেজিস্টার এবং স্থানীয় ভেরিয়েবলগুলি সংরক্ষণ করতে হবে না call ret
।
আমি @ ব্যবহারকারী21714 এর উত্তরে প্রসারিত করব। Coroutines হ'ল নির্বাহের স্বাধীন পথ যা একই সাথে চলতে পারে না। এগুলি একটি নিয়ামকের উপর নির্ভর করে - যেমন একটি python
নিয়ামক গ্রন্থাগার - এই পাথগুলির মধ্যে স্যুইচিং পরিচালনা করতে। তবে এটি কাজ করার জন্য কর্টাইনগুলিকে নিজেরাই অনুরোধ করতে হবে yield
বা অনুরূপ কাঠামো তৈরি করা উচিত যা তাদের মৃত্যুদণ্ড কার্যকর হতে পারে।
পরিবর্তে থ্রেডগুলি স্বতন্ত্র গণনা সংস্থান এবং একে অপরের সাথে সমান্তরালে চলছে। যেহেতু এগুলি বিভিন্ন সংস্থার উপর রয়েছে তাই কার্যকর করার অন্যান্য পথগুলি এগিয়ে যাওয়ার জন্য ফলন আহরণ করার প্রয়োজন নেই ।
আপনি একটি বহুমাত্রিক প্রোগ্রাম শুরু করে এই প্রভাবটি দেখতে পারেন - যেমন একটি jvm
অ্যাপ্লিকেশন - এতে আপনার core i7
হাইপারথ্রেডের সমস্ত আটটি ব্যবহার করা হয়েছে: আপনি এতে Activity Monitor
বা 7৯7% ব্যবহার দেখতে পাচ্ছেন Top
। পরিবর্তে একটি সাধারণ python
প্রোগ্রাম চালানোর সময় - এমনকি এর সাথে coroutines
বা একটি python threading
- ব্যবহারটি সর্বোচ্চ 100% এ বেরিয়ে আসবে। অর্থাৎ একটি মেশিন হাইপারথ্রেড।