দ্রষ্টব্য: আমি যেখানেই উল্লেখ করেছি threadআমি স্পষ্টভাবে বিবরণ না দেওয়া পর্যন্ত পাইথনে থ্রেডগুলি নির্দিষ্ট করে বলতে চাইছি ।
আপনি যদি আসেন তবে থ্রেডগুলি অজগরটিতে কিছুটা আলাদাভাবে কাজ করে C/C++ পটভূমি । অজগরটিতে, একটি নির্দিষ্ট সময়ে কেবলমাত্র একটি থ্রেড চলমান অবস্থায় থাকতে পারে his এর অর্থ অজগরের থ্রেডগুলি সত্যিকার অর্থে একাধিক প্রসেসিং কোরগুলির শক্তি অর্জন করতে পারে না কারণ নকশার দ্বারা থ্রেডগুলির পক্ষে একাধিক কোরের সাথে সমান্তরালভাবে চালানো সম্ভব নয়।
পাইথন মেমরি ব্যবস্থাপনা থ্রেড-নিরাপদ নয় প্রতিটি থ্রেড পাইথন interpreter.This ডেটা স্ট্রাকচার একটি একচেটিয়া এক্সেস একচেটিয়া এক্সেস একটি প্রক্রিয়া নামক দ্বারা অর্জিত হয় প্রয়োজন (গ্লোবাল interpretr লক) ।GIL
Why does python use GIL?
একাধিক থ্রেড একসাথে ইন্টারপ্রেটার স্টেটে অ্যাক্সেস করা এবং দোভাষীর স্থিতিকে কলুষিত করা থেকে বিরত রাখতে।
ধারণাটি যখনই কোনও থ্রেড কার্যকর করা হয় (এটি মূল থ্রেড হলেও) , একটি জিআইএল অধিগ্রহণ করা হয় এবং কিছু পূর্বনির্ধারিত বিরতি পরে জিআইএল বর্তমান থ্রেড দ্বারা প্রকাশিত হয় এবং অন্য কোনও থ্রেড দ্বারা পুনরুদ্ধার করা (যদি থাকে)।
Why not simply remove GIL?
এটি জিআইএলকে অপসারণ করা অসম্ভব নয়, এটি কেবলমাত্র এমনটি করার প্রবণতা অনুসারে অ্যাক্সেসকে সিরিয়ালাইজ করার জন্য আমরা দোভাষীের ভিতরে একাধিক লক স্থাপন করি, যা এমনকি একটি একক থ্রেডযুক্ত অ্যাপ্লিকেশনকে কম পারফর্মেন্ট করে তোলে।
তাই জিআইএল অপসারণের ব্যয়টি একটি একক থ্রেড অ্যাপ্লিকেশনটির হ্রাসপ্রাপ্ত পারফরম্যান্সের মাধ্যমে পরিশোধ করা হয়, যা কখনই পছন্দসই হয় না।
So when does thread switching occurs in python?
জিআইএল প্রকাশিত হলে থ্রেড সুইচ হয় G তাই জিআইএল কখন প্রকাশিত হয়? বিবেচনায় নেওয়ার জন্য দুটি পরিস্থিতি রয়েছে।
যদি কোনও থ্রেড সিপিইউ বাউন্ড অপারেশন করে (প্রাক্তন চিত্র প্রক্রিয়াকরণ)।
পাইথনের পুরাতন সংস্করণগুলিতে পাইথন নির্দেশাবলীর নির্দিষ্ট সংখ্যার পরে থ্রেড স্যুইচিং ব্যবহৃত হত default 100এটি ডিফল্টরূপে সেট করা ছিল a এটি দেখা গেল যে কোনও একক নির্দেশনা কার্যকর করার সময় ব্যয় করার পরে স্যুইচিং কখন হওয়া উচিত তা সিদ্ধান্ত নেওয়া খুব ভাল নীতি নয় not মিলিসেকেন্ড থেকে এক সেকেন্ড পর্যন্তও খুব বন্যভাবে যেতে পারে foreএজন্য প্রত্যেকের পরে জিআইএলকে মুক্তি দেওয়া100 নির্দেশাবলী তারা চালানো নেওয়া নির্বিশেষে একটি দরিদ্র নীতি।
নতুন সংস্করণগুলিতে থ্রেডে স্যুইচ করতে মেট্রিক হিসাবে নির্দেশনা গণনাটি ব্যবহার না করে একটি কনফিগারযোগ্য সময় ব্যবধান ব্যবহৃত হয়। ডিফল্ট সুইচ ব্যবধানটি 5 মিলিসেকেন্ড y আপনি বর্তমান স্যুইচ ব্যবধানটি ব্যবহার করতে পারেনsys.getswitchinterval() । এটি ব্যবহার করে পরিবর্তন করা যেতে পারেsys.setswitchinterval()
যদি কোনও থ্রেড কিছু আইও বাউন্ড অপারেশন করে থাকে (এক্স ফাইল সিস্টেম অ্যাক্সেস বা
নেটওয়ার্ক আইও)
জিআইএল মুক্তি পাবে যখনই থ্রেড আইও অপারেশনটি সম্পন্ন হওয়ার জন্য কারও জন্য অপেক্ষা করছে।
Which thread to switch to next?
দোভাষীর নিজস্ব সময়সূচী নেই r. যে থ্রেডটি বিরতি শেষে নির্ধারিত হয়ে যায় অপারেটিং সিস্টেমের সিদ্ধান্ত। ।