আমি কোটলিন Coroutine পড়ছি এবং জানি যে এটি suspend
ফাংশনের উপর ভিত্তি করে । কিন্তু suspend
মানে কি?
কর্টিন বা ফাংশন স্থগিত?
Https://kotlinlang.org/docs/references/coroutines.html থেকে
মূলত, করোটাইনগুলি এমন একটি গণনা যা কোনও থ্রেড ব্লক না করে স্থগিত করা যায়
শুনেছি লোকেরা প্রায়শই "সাসপেন্ড ফাংশন" বলে say তবে আমি মনে করি এটি কার্টিনই স্থগিত হয়ে যায় কারণ এটি ফাংশনটি শেষ হওয়ার অপেক্ষায় রয়েছে? "সাসপেন্ড" এর অর্থ সাধারণত "অপারেশন বন্ধ করুন", এক্ষেত্রে কর্টিন অলস।
We আমাদের কি কর্টিন স্থগিত করা উচিত?
কোন কর্টিন স্থগিত হয়?
Https://kotlinlang.org/docs/references/coroutines.html থেকে
উপমা অব্যাহত রাখতে, অপেক্ষা () একটি স্থগিত ফাংশন হতে পারে (অতএব এটি একটি অ্যাসিঙ্ক}} ব্লকের মধ্যে থেকে কলযোগ্য) যা কিছু গণনা না করা এবং তার ফলাফল না ফেরানো পর্যন্ত একটি কর্টিন স্থগিত করে:
async { // Here I call it the outer async coroutine
...
// Here I call computation the inner coroutine
val result = computation.await()
...
}
🤔 এটি বলে যে "কিছু গণনা শেষ না হওয়া পর্যন্ত কোনও কর্টিন স্থগিত করে", তবে করাউটিন হালকা ওজনের থ্রেডের মতো। সুতরাং যদি কর্টিন স্থগিত করা হয় তবে গণনা কীভাবে করা যায়?
আমরা দেখি await
যে আহ্বান জানানো হয়েছে computation
, সুতরাং এটি async
ফিরে আসতে পারে Deferred
যার অর্থ এটি অন্য কর্টিন শুরু করতে পারে
fun computation(): Deferred<Boolean> {
return async {
true
}
}
🤔 উদ্ধৃতিটি বলে যে কোনও কর্টিন স্থগিত করে । এর অর্থ কি suspend
বাইরের async
কর্টিন, suspend
না অভ্যন্তরের computation
কর্টিন?
এর suspend
অর্থ এই যে বাইরের async
কর্টিনটি await
অভ্যন্তরীণ computation
কর্টিন সমাপ্ত হওয়ার জন্য অপেক্ষা করছে ( এটি বাহ্যিক async
কর্টিন) অলৌকিক (তাই নামটি স্থগিত করা) এবং থ্রেড পুলে থ্রেডটি ফেরত দেয় এবং যখন সন্তানের computation
কর্টিন শেষ হয়, তখন এটি (বাহ্যিক বাহ্যিক বাহিনী)async
কর্টিন) ) জেগে, পুল থেকে অন্য থ্রেড নেয় এবং অবিরত থাকে?
আমি থ্রেডটি উল্লেখ করার কারণটি হ'ল https://kotlinlang.org/docs/tutorials/coroutines-basic-jvm.html
কর্টিন অপেক্ষা করার সময় থ্রেডটি পুলটিতে ফিরে আসে এবং যখন অপেক্ষাটি শেষ হয়, তখন পুলটি একটি মুক্ত থ্রেডে পুনরায় শুরু হয়