আমি দেখতে পাচ্ছি যে প্রশ্নটি অনুগ্রহের সাথে পুনরায় সক্রিয় করা হয়েছে, এখন ব্যবহারিক ব্যবহারগুলি কী তা জিজ্ঞাসা yieldকরছে। আমি আমার অভিজ্ঞতা থেকে একটি উদাহরণ দেব।
যেমনটি আমরা জানি, yieldকলিং থ্রেডকে প্রসেসরটি যে চলছে তা ছেড়ে দিতে বাধ্য করে যাতে অন্য থ্রেডটি চালানোর সময় নির্ধারণ করা যায়। বর্তমান থ্রেডটি আপাতত তার কাজ শেষ করার পরে এটি দরকারী তবে দ্রুত সারিটির সামনের দিকে ফিরে এসে কিছু অবস্থার পরিবর্তন হয়েছে কিনা তা পরীক্ষা করতে চায়। এটি কন্ডিশন ভেরিয়েবল থেকে কীভাবে আলাদা? yieldথ্রেডটিকে চলমান অবস্থায় দ্রুত ফিরে আসতে সক্ষম করে। যখন কোনও শর্তের পরিবর্তনশীলটির জন্য অপেক্ষা করা হয় তখন থ্রেড স্থগিত করা হয় এবং এটি চালিয়ে যাওয়া উচিত যে সিগন্যাল করার জন্য আলাদা থ্রেডের জন্য অপেক্ষা করা প্রয়োজন।yieldমূলত বলেছে "আলাদা থ্রেড চালানোর অনুমতি দিন, তবে আমার রাজ্যে খুব দ্রুত কিছু পরিবর্তন হওয়ার প্রত্যাশা করায় খুব তাড়াতাড়ি আমাকে আবার কাজ করতে ফিরে আসতে দিন"। ব্যস্ত কাটাকাটির দিকে এই ইঙ্গিত দেয়, যেখানে একটি শর্ত দ্রুত পরিবর্তন করতে পারে তবে থ্রেড স্থগিতকরণে একটি বড় পারফরম্যান্স হিট লাগবে।
তবে পর্যাপ্ত বাধা, এখানে একটি দৃ concrete় উদাহরণ: ওয়েভফ্রন্ট সমান্তরাল প্যাটার্ন। এই সমস্যার একটি প্রাথমিক উদাহরণ হ'ল 0 এবং 1 এর সাথে ভরা দ্বিদলীয় অ্যারেতে 1 এর স্বতন্ত্র "দ্বীপপুঞ্জ" গণনা করা। একটি "দ্বীপ" হ'ল কোষগুলির একটি গ্রুপ যা প্রত্যেকে উল্লম্ব বা অনুভূমিকভাবে সংযুক্ত থাকে:
1 0 0 0
1 1 0 0
0 0 0 1
0 0 1 1
0 0 1 1
এখানে আমাদের 1s এর দুটি দ্বীপ রয়েছে: উপরের-বাম এবং নীচে-ডান।
একটি সহজ সমাধানটি হ'ল পুরো অ্যারেতে প্রথম পাস করা এবং 1 টি মানকে একটি বাড়ানো কাউন্টারের সাথে প্রতিস্থাপন করা যা শেষ পর্যন্ত প্রতিটি 1 সারি মেজাজের ক্রম সংখ্যার সাথে প্রতিস্থাপন করা হয়েছিল:
1 0 0 0
2 3 0 0
0 0 0 4
0 0 5 6
0 0 7 8
পরবর্তী পদক্ষেপে, প্রতিটি মান নিজের এবং প্রতিবেশীদের মানগুলির মধ্যে ন্যূনতম দ্বারা প্রতিস্থাপিত হয়:
1 0 0 0
1 1 0 0
0 0 0 4
0 0 4 4
0 0 4 4
আমরা এখন সহজেই নির্ধারণ করতে পারি যে আমাদের দুটি দ্বীপ রয়েছে।
আমরা যে অংশটি সমান্তরালভাবে চালাতে চাই তা হ'ল পদক্ষেপটি যেখানে আমরা সর্বনিম্নগুলি গণনা করি। খুব বেশি বিশদে না গিয়ে, প্রতিটি থ্রেড একটি আন্তঃবিবাহিতভাবে সারি পায় এবং উপরের সারিটি থ্রেড প্রক্রিয়াজাতকরণের দ্বারা গুণিত মানগুলিতে নির্ভর করে। সুতরাং, প্রতিটি থ্রেডটি পূর্ববর্তী লাইনে থ্রেড প্রক্রিয়াজাতকরণের তুলনায় কিছুটা পিছিয়ে থাকা দরকার, তবে যুক্তিসঙ্গত সময়ের মধ্যেও এটি রাখা উচিত। আরো বিস্তারিত এবং বাস্তবায়নের নিজে নিজেই উপস্থাপন করা হয় এই দস্তাবেজটি । এর ব্যবহার sleep(0)কম বেশি কম সি এর সমষ্টি বিবেচনা করুন yield।
এই ক্ষেত্রে yieldঅর্ডার বিরাম ঘুরে প্রতিটি থ্রেড বলপূর্বক ক্ষেত্রে ব্যবহার করা হয়েছিল, কিন্তু থ্রেড সংলগ্ন সারি প্রক্রিয়াকরণের ইতিমধ্যে খুব দ্রুত এগিয়ে যাবে সাল থেকে একটি শর্ত পরিবর্তনশীল একটি সর্বনাশা পছন্দ প্রমাণ হবে।
আপনি দেখতে পাচ্ছেন, yieldএটি বেশ সূক্ষ্ম শস্যের অপ্টিমাইজেশন। এটি ভুল জায়গায় ব্যবহার করা যেমন কদাচিৎ পরিবর্তিত অবস্থার জন্য অপেক্ষা করা সিপিইউর অত্যধিক ব্যবহারের কারণ হবে।
দীর্ঘ বাচ্চাদের জন্য দুঃখিত, আশা করি আমি নিজেকে পরিষ্কার করে দিয়েছি।