কর্টিন কী?


204

কর্টিন কী? তারা কীভাবে সামঞ্জস্যের সাথে সম্পর্কিত?


2
সাম্প্রতিক কোডটি অগত্যা "সমান্তরাল" চলতে হবে না (আসুন নতুন শর্তাদি প্রবর্তন করি না)।
lucid_dreamer

2
আমি স্ট্যান্ডার্ড সি দিয়ে একটি কর্টিন লাইব্রেরি লিখেছি, লিনাক্স, বিএসডি এবং উইন্ডোজের জন্য সিলেক্ট / পোল / এপেলিল / কেকিউ / আইওসিপি / উইন জিইউআই বার্তা সমর্থন করে। এটি github.com/acl-dev/libfiber- এ একটি ওপেন সোর্স প্রকল্প । পরামর্শ ভাল হবে।
শুশিন ঝেং

আরও আকর্ষণীয় তথ্য এখানে: stackoverflow.com/q/16951904/14357
ব্যয়কারী

আমি ভাবতে পারি এই প্রশ্নটি যদি এই বর্তমান যুগে জিজ্ঞাসা করা হয় তবে তা হ্রাস পাবে। পূর্বের তুলনায় কেন সম্প্রদায়ের উপলব্ধির এত বিশাল পার্থক্য রয়েছে তা নিশ্চিত নন?
tnkh

একটি কর্টিন একটি ফাংশন যা প্রত্যাবর্তনের আগে পৌঁছানোর আগেই এর কার্যকরকরণ স্থগিত করতে পারে এবং এটি অপ্রত্যক্ষভাবে কিছু সময়ের জন্য অন্য কোনও কর্টিনের নিয়ন্ত্রণ নিয়ন্ত্রণ করতে পারে।
hassanzadeh.sd

উত্তর:


138

Coroutines এবং একযোগে মুদ্রা মূলত orthogonal হয়। কর্টাইনগুলি একটি সাধারণ নিয়ন্ত্রণ কাঠামো যার মাধ্যমে প্রবাহ নিয়ন্ত্রণটি সমবায়ভাবে দুটি ভিন্ন রুটিনের মধ্যে ফিরে না এসে পার হয়ে যায়।

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


19
সরাসরি কোনও ফাংশনটি কল করা এবং এই কর্টিনে এই ফাংশনটি মোড়ক দিয়ে কোনও কর্টিন থেকে উত্পন্ন করার মধ্যে পার্থক্য কী?
মিং লি

3
এটি ব্যাখ্যা করা আরও ভাল হতে পারে যে এই দুটি ধারণাগুলি আসলে এই প্রসঙ্গে 'অर्थোগোনাল' নয়। দুটি ধারণাগুলি একে অপরের সাথে কীভাবে মিল রয়েছে তা আপনি অবশ্যই আঁকতে পারেন। দুই বা ততোধিক জিনিসের মধ্যে নিয়ন্ত্রণ পাস করার ধারণাটি একই রকম।
স্টিভিজয়

8
Coroutines are a general control structure whereby flow control is cooperatively passed between two different routines without returning.<- এই হল সম্পাতবিন্দু। আপনি যে শব্দটির সন্ধান করছেন তা সমান্তরালতা।
অ্যাডাম আরল্ড

@ স্টেভিজেয় orthogonal = Not similar to each other?
টোনিক্স

1
@ টোনিক্স আমাকে বলা হয়েছিল তার orthogonalঅর্থ "একে অপরের থেকে স্বতন্ত্র"।
রিক

77

লুয়াতে প্রোগ্রামিং থেকে " Coroutines" বিভাগ:

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

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

" concurrency" এর জন্য, আপনি রব পাইকের স্লাইডটি উল্লেখ করতে পারেন :

কনকুরেন্সি হ'ল স্বাধীনভাবে গণনাগুলির রচনা।

সুতরাং coroutine ক-এর সম্পাদনের সময়, এটা coroutine বি নিয়ন্ত্রণ তারপর কিছু সময় পরে, coroutine বি coroutine উ নিয়ন্ত্রণ ফিরে যেহেতু নেই পাসের পাসের নির্ভরতা , coroutines মধ্যে, এবং তারা টমটম চালানো হবে যাতে দুই coroutines হয় সম্পাতবিন্দু না


6
Coroutines স্বাধীনভাবে কার্যকর করা হয় না। তারা মোড় নেয়, প্রতিটি কাজটির কিছু অংশ অপরের জন্য অপেক্ষা করে। তারা সক্রিয়ভাবে একে অপরের সাথে সমন্বয়। এটি রব পাইকস সম্মতির সংজ্ঞাটির বিপরীত।
এরিক জি.হ্যাগস্ট্রোম

2
@ এরিকজি.হ্যাগস্ট্রোম: যদিও তারা স্বতন্ত্রভাবে সম্পাদন করে না, প্রতিটি কর্টিনের যুক্তি স্বাধীন হতে পারে, তাই না? যদি এটি সঠিক হয় তবে এটি ঠিক এক-কোর সিপিইউতে চলমান একটি পূর্ব-পূর্বের ওএসের মতো, অন্য কাজগুলি চালিয়ে যেতে এক প্রক্রিয়াতে অবশ্যই সিপিইউ ত্যাগ করতে হবে।
নান জিয়াও

6
কিছু অন্যান্য কাজ চালিয়ে যেতে সিপিইউ ত্যাগ করা , এবং নির্দিষ্ট কিছু প্রক্রিয়া চালানোর সময় হওয়ার মধ্যে পার্থক্য রয়েছে । Coroutines পরের না। এটি কোনও দিক থেকে স্বাধীন নয়
এরিক জি.হ্যাগস্ট্রোম

7
@ ক্রিস ক্লার্ক আমি আপনার সাথে একমত Coroutines একযোগে হয়। এখানে উইকিপিডিয়া থেকে কিছু উদ্ধৃতি দেওয়া হয়েছে: Coroutines থ্রেডগুলির সাথে খুব মিল। যাইহোক, কর্টাইনগুলি সমবায়ভাবে মাল্টিটাস্কযুক্ত, অন্যদিকে থ্রেডগুলি সাধারণত পূর্বনির্ধারিতভাবে মাল্টিটাস্কযুক্ত। এর অর্থ হ'ল তারা সামঞ্জস্যতা সরবরাহ করে তবে সমান্তরালতা নয়
স্মিভিকিপিডিয়া

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

47

আমি বেশিরভাগ উত্তরগুলি প্রযুক্তিগত প্রশ্ন হলেও খুব প্রযুক্তিগত বলে মনে করি। কর্টিন প্রক্রিয়াটি বোঝার চেষ্টা করতে আমার বেশ কষ্ট হয়েছিল। আমি এটি পেতে চাই কিন্তু তবে আমি একই সময়ে তা পাই না।

আমি এই উত্তরটি এখানে খুব সহায়ক হিসাবে পেয়েছি:

https://dev.to/thibmaek/explain-coroutines-like-im-five-2d9

ইদান আর্যর উদ্ধৃতি:

আপনার গল্পটি তৈরি করার জন্য, আমি এটিকে এমন কিছু দিয়েছি:

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

ধারণাটি হ'ল আপনি একবারে সমস্ত কিছু করছেন এমন দেখানোর জন্য আপনি কেবল কার্যগুলি খুব দ্রুত স্যুইচ করবেন না। আপনার প্রত্যক্ষ মনোযোগের প্রয়োজন এমন অন্যান্য কাজ করার জন্য আপনি যখন কিছু হওয়ার (অপর) অপেক্ষা করছেন তার সময়টি আপনি কাজে লাগান।

অবশ্যই লিঙ্কটি চেক করুন, আরও অনেক কিছুই রয়েছে যা আমি সমস্ত কিছু উদ্ধৃত করতে পারি না।


6
খুব সাধারণ এবং সোজা-এগিয়ে চিত্রণ। এই জন্য +1।
তাসলিম ওসেনি

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

1
এটা দুর্দান্ত ব্যাখ্যা। উদ্ধৃতি নিজে থেকেই, এটি অত্যন্ত পরিষ্কার।
ফররুহ হাবিবুল্লায়েভ

15

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


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

11
  • কোটলিন ভাষায় Coroutines দুর্দান্ত বৈশিষ্ট্য features
  • কর্টাইনগুলি অ্যাসিক্রোনাস, অ-ব্লকিং কোড (এবং আরও অনেক কিছু) রচনার একটি নতুন উপায়
  • কর্টিন হালকা ওজনের থ্রেড। হালকা ওজনের থ্রেডের অর্থ এটি দেশীয় থ্রেডে মানচিত্র তৈরি করে না, সুতরাং প্রসেসরের উপর প্রসঙ্গের স্যুইচিংয়ের প্রয়োজন হয় না, তাই এগুলি দ্রুত হয়।
  • এটি নেটিভ থ্রেডে মানচিত্র দেয় না
  • Coroutines এবং থ্রেড উভয় মাল্টিটাস্কিং হয়। তবে পার্থক্যটি হ'ল থ্রেডগুলি ওএস এবং কর্টাইন দ্বারা ব্যবহারকারীরা পরিচালনা করে।

মূলত, দুটি ধরণের Coroutines রয়েছে:

  1. Stackless
  2. Stackful

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

এই কর্টিন শুরু করার কাজগুলি:

launch{}

async{}

আপনি এখান থেকে আরও শিখতে পারেন:

https://www.kotlindevelopment.com/deep-dive-coroutines/

https://blog.mindorks.com/what-are-coroutines-in-kotlin-bf4fecd476e9


1
ভাল উত্তর! কোটলিন এবং অ্যান্ড্রয়েড বিকাশকারীদের জন্য দরকারী।
মালভিন্দর সিং 13

5

অন্য একটি নোটে, পাইথন geventলাইব্রেরিতে একটি coroutineভিত্তিক নেটওয়ার্কিং লাইব্রেরি যা আপনাকে থ্রেড তৈরি ও ধ্বংসের ওভারহেড ছাড়াই অ্যাসিঙ্ক নেটওয়ার্ক অনুরোধের মতো থ্রেডলাক বৈশিষ্ট্য সরবরাহ করে। coroutineব্যবহৃত লাইব্রেরি greenlet


2

পাইথন কর্টিন থেকে :

পাইথন কর্টিনগুলি সম্পাদন স্থগিত করা যেতে পারে এবং অনেকগুলি স্থানে পুনরায় শুরু করা যেতে পারে (কর্টিন দেখুন)। কোনও কর্টিন ফাংশনের মূল অভ্যন্তরে, অপেক্ষা করুন এবং অ্যাসিঙ্ক সনাক্তকারীরা সংরক্ষিত কীওয়ার্ডে পরিণত হয়; অভিব্যক্তিগুলির জন্য অপেক্ষা করুন, 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 এর উত্তরের আওতায় @ অ্যাডাম আর্লডের মন্তব্য হিসাবে। এটি একমত
তবে এটি মাল্টিথ্রেডিং থেকে আলাদা। স্টাড :: থ্রেড থেকে

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

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


1

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

  • কর্টিন একটি উপ-প্রোগ্রাম যা একাধিক এন্ট্রি রাখে এবং সেগুলি নিজেই নিয়ন্ত্রণ করে - লুয়ায় সরাসরি সমর্থিত

  • যাকে সিমেট্রিক কন্ট্রোল বলা হয়: কলার এবং কল কর্টিনগুলি আরও সমান ভিত্তিতে থাকে

  • একটি কর্টিন কলকে একটি জীবনবৃত্তির নাম দেওয়া হয়েছে

  • কর্টিনের প্রথম পুনঃসূচনাটি শুরু হয় তবে কর্টিনে শেষ সম্পাদিত বিবৃতি দেওয়ার ঠিক পরে পরবর্তী কলগুলি বিন্দুতে প্রবেশ করে

  • কর্টাইনগুলি একে অপরকে পুনরায় শুরু করে, সম্ভবত চিরকালের জন্য

  • Coroutines প্রোগ্রাম ইউনিট (কর্টিনস) এর পরিমাণ-সমবর্তী বাস্তবায়ন সরবরাহ করে; তাদের ফাঁসি ফাঁকে ফাঁকে ফাঁকে দেওয়া হয় না

Example1 Example2


1

আমি এই লিঙ্কটি থেকে একটি ব্যাখ্যা খুঁজে পেতে বেশ সোজা এগিয়ে। এই উত্তরগুলির মধ্যে উত্তরের শেষ বুলেট পয়েন্ট ব্যতীত সামঞ্জস্য বনাম সমান্তরালতা ব্যাখ্যা করার চেষ্টা করা হয়নি ।

  1. সমবর্তী (প্রোগ্রাম) কি?

কিং আর্মস্ট্রংয়ের "প্রোগ্রামিং এরলং" থেকে উদ্ধৃত , কিংবদন্তি:

একটি সমান্তরাল প্রোগ্রাম একটি সমান্তরাল কম্পিউটারে সম্ভাব্য দ্রুত চলতে পারে।

  • সমবর্তী প্রোগ্রাম হ'ল একটি প্রোগ্রাম যা সমবর্তী প্রোগ্রামিং ভাষায় লেখা। আমরা পারফরম্যান্স, মাপদণ্ডযোগ্যতা বা ত্রুটি সহনশীলতার কারণে সমবর্তী প্রোগ্রামগুলি লিখি।

  • একযোগে প্রোগ্রামিং ভাষা এমন একটি ভাষা যা সমবর্তী প্রোগ্রাম লেখার জন্য সুস্পষ্ট ভাষা গঠন করে। এই গঠনগুলি প্রোগ্রামিং ভাষার একটি অবিচ্ছেদ্য অঙ্গ এবং সমস্ত অপারেটিং সিস্টেমে একইভাবে আচরণ করে।

  • সমান্তরাল কম্পিউটার এমন এক কম্পিউটার যা একই সাথে চলতে পারে বেশ কয়েকটি প্রসেসিং ইউনিট (সিপিইউ বা কোর) has

সুতরাং সমঝোতা সমান্তরালতার মতো নয়। আপনি এখনও একটি একক কোর কম্পিউটারে সমবর্তী প্রোগ্রাম লিখতে পারেন। সময় ভাগ করার সময়সূচী আপনাকে অনুভব করবে যে আপনার প্রোগ্রামটি একই সাথে চলছে running

সমবর্তী প্রোগ্রামের সমান্তরাল কম্পিউটারে সমান্তরালে চলার সম্ভাবনা রয়েছে তবে গ্যারান্টিযুক্ত নয় । আপনার প্রোগ্রামটি চালানোর জন্য ওএস আপনাকে কেবল একটি কোর দিতে পারে।

অতএব, একত্রীকরণ একটি সমবর্তী প্রোগ্রামের একটি সফ্টওয়্যার মডেল যার অর্থ এই নয় যে আপনার প্রোগ্রামটি শারীরিকভাবে সমান্তরালে চলতে পারে।

  1. কর্টিন এবং সম্মতি

"কর্টিন" শব্দটি দুটি শব্দ দ্বারা গঠিত: "কো" (সমবায়) এবং "রুটিন" (ফাংশন)।

ক। এটি সম্মতি বা সমান্তরালতা অর্জন করে?

সহজ হতে, আসুন এটি একটি একক কোর কম্পিউটারে আলোচনা করা যাক ।

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

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

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

Coroutine সমান্তরালতা অর্জন করতে পারে? যদি এটি সিপিইউ-বাউন্ড কোড হয় তবে না। সময়-ভাগের মতো, এটি আপনাকে মনে করে যে তারা সমান্তরালভাবে চালিত হয় তবে তাদের মৃত্যুদণ্ড কার্যকর করা হয় না a যদি এটি আইও-আবদ্ধ হয়, হ্যাঁ, এটি আপনার কোড দ্বারা নয় হার্ডওয়ার (আইও ডিভাইস) দ্বারা সমান্তরাল অর্জন করে।

খ। ফাংশন কল সঙ্গে পার্থক্য?

এখানে চিত্র বর্ণনা লিখুন

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


0

আমি @ ব্যবহারকারী21714 এর উত্তরে প্রসারিত করব। Coroutines হ'ল নির্বাহের স্বাধীন পথ যা একই সাথে চলতে পারে না। এগুলি একটি নিয়ামকের উপর নির্ভর করে - যেমন একটি pythonনিয়ামক গ্রন্থাগার - এই পাথগুলির মধ্যে স্যুইচিং পরিচালনা করতে। তবে এটি কাজ করার জন্য কর্টাইনগুলিকে নিজেরাই অনুরোধ করতে হবে yieldবা অনুরূপ কাঠামো তৈরি করা উচিত যা তাদের মৃত্যুদণ্ড কার্যকর হতে পারে।

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

আপনি একটি বহুমাত্রিক প্রোগ্রাম শুরু করে এই প্রভাবটি দেখতে পারেন - যেমন একটি jvmঅ্যাপ্লিকেশন - এতে আপনার core i7হাইপারথ্রেডের সমস্ত আটটি ব্যবহার করা হয়েছে: আপনি এতে Activity Monitorবা 7৯7% ব্যবহার দেখতে পাচ্ছেন Top। পরিবর্তে একটি সাধারণ pythonপ্রোগ্রাম চালানোর সময় - এমনকি এর সাথে coroutinesবা একটি python threading- ব্যবহারটি সর্বোচ্চ 100% এ বেরিয়ে আসবে। অর্থাৎ একটি মেশিন হাইপারথ্রেড।

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