গোরোটাইন ফুটো এবং কীভাবে এটির ডিবাগ করা যায় তার একটি উদাহরণ

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

গোরোটিন ফুটো কি?

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

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

তাহলে ফাঁস কোথায়? উপরের সরলীকৃত উদাহরণে, সময়সীমাটি মাত্র 1 সেকেন্ডের সময় যাচাইকরণের কাজটি 10 ​​সেকেন্ড সময় নিচ্ছে taking তার অর্থ dead ওয়েটরেডি` থেকে ফিরে প্রথমে নির্ধারিত সময়সীমা কার্যকর করা হবে ` সার্কিট 9 সেকেন্ড পরে, আমাদের গোরোটাইন ভেরিফায়ার থেকে ফলাফল গ্রহণ করে এবং ড্যাড চ্যানে লেখার চেষ্টা করে। আনফারড চ্যানেলটিতে লেখা ব্লক করা হচ্ছে এবং সেই চ্যানেলে কেউ শুনছে না কারণ আমরা ইতোমধ্যে ওয়েটার রেডি থেকে ফিরে এসেছি - এবং এখানে আমাদের ফাঁস!

আপনার গোরোটিন ফুটো আছে কীভাবে তা সন্ধান করবেন?

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

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