কম্পিউটার

পাইথন গ্লোবাল ইন্টারপ্রেটার লক (GIL) কি?


এই নিবন্ধে, আমরা পাইথন গ্লোবাল ইন্টারপ্রেটার লক (GIL) কী তা সম্পর্কে জানব।

এটি একটি লক বা বাধা যা পাইথন ইন্টারপ্রেটারের একযোগে একাধিক থ্রেডের প্রাপ্যতাকে প্রতিরোধ করে। Python 3.x-এ GIL একটি ত্রুটি/সমস্যা হিসাবে চিহ্নিত করা হয়েছে। বা তার আগে কারণ এটি মাল্টি-থ্রেডেড আর্কিটেকচারে মাল্টিথ্রেডিংয়ের অনুমতি দেয় না।

কেন এটি চালু করা হয়েছে?

পাইথন স্বয়ংক্রিয় আবর্জনা সংগ্রহের ধারণাকে সমর্থন করে। কোনো বস্তুর রেফারেন্স কাউন্ট শূন্যে পৌঁছানোর সাথে সাথে মেমরি পরিষ্কার করা হয় এবং ব্যবহারের জন্য বিনামূল্যে।

>>> import sys
>>> var = {}
>>> print(sys.getrefcount(ar))
>>> 2
>>> v=var
>>> print(sys.getrefcount(v))
>>> 3

এই ক্ষেত্রে যদি রেফারেন্স গণনা কমতে থাকে এবং একযোগে বাড়তে থাকে স্বয়ংক্রিয় সংগ্রাহক সঠিকভাবে কাজ করতে সক্ষম হবে না এবং তাই মেমরি ফুটো হওয়ার সম্ভাবনা বেড়ে যায়।

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

পাইথন গ্লোবাল ইন্টারপ্রেটার লক (GIL) কি?

কেন জিআইএল এখনও পাইথনে বিদ্যমান

জিআইএলকে উন্নত করতে হবে যাতে আমরা এটিকে আরও ভালোভাবে পরিচালনা করতে পারি। তাই জিআইএলকে সরিয়ে দেওয়ার পরিবর্তে, আমরা জিআইএল-এর ধারণা উন্নত করার জন্য কাজ করছি। যেহেতু পাইথন সম্পূর্ণরূপে c এবং cpython এর বেসের সাথে যুক্ত তাই আমরা সরাসরি গিলকে সরাতে পারি না। যদিও সমস্যাগুলি পরিচালনা করার জন্য বিভিন্ন পদ্ধতি রয়েছে যা জিআইএল যা সমাধান করে তা বাস্তবায়ন করা কঠিন এবং সিস্টেমের প্রক্রিয়াকরণ এবং চালানোর সময় হ্রাস করা।

যেমন,

ধরা যাক P1 প্রসেস টি 1 এবং t2 নিয়ে চলছে। পাইথন থ্রেডগুলি প্রকৃতির দ্বারা স্থানীয়, অন্তর্নিহিত অপারেটিং সিস্টেম দ্বারা নির্ধারিত হয়৷

t1 রানিং (রান স্টেজ) (জিআইএল অর্জন করুন) → টি1 I/O(ইন/আউট) এর জন্য অপেক্ষা করছে (জিআইএল প্রকাশ করে) → টি2 রানিং (রান স্টেজ) (জিআইএল অর্জন করে, এই সময়ের মধ্যে টি1ও চালানোর জন্য প্রস্তুত কিন্তু জিআইএল অধিগ্রহণ করা হয়েছে দ্বারা t2)

সুতরাং, এখানে GIL প্রধান সীমাবদ্ধতা হয়ে ওঠে। তাই, যদি আমরা একটি মাল্টি-থ্রেডেড পাইথন অ্যাপ্লিকেশন/মডিউল লিখতে চাই যা ভারী CPU আবদ্ধ অপারেশন করে, তাহলে কাঙ্খিত ফলাফল পাওয়া অসম্ভব হয়ে পড়ে।

কারণ, পাইথনে বাস্তব মাল্টি-থ্রেডিং সম্ভব নয়, যেহেতু কার্যকরভাবে প্রক্রিয়াটি একক সময়ে শুধুমাত্র একটি সিপিইউ ব্যবহার করবে এমনকি মাল্টিকোর সিপিইউ উপলব্ধ থাকলেও।

যাইহোক, বেশিরভাগ পাইথন অ্যাপ্লিকেশনে (ওয়েব অ্যাপ্লিকেশন, জ্যাঙ্গো ভিত্তিক সার্ভার, ইত্যাদি), এটি একটি সমস্যা থেকে যায় না কারণ এই অ্যাপ্লিকেশনগুলি I/O প্রকৃতি দ্বারা আবদ্ধ।

পাইথন প্রোগ্রামার হিসাবে, আমরা পাইথনে এক্সিকিউটেবল সি/সি++ মডিউল/স্ক্রিপ্ট না লেখা পর্যন্ত জিআইএল অর্জন এবং রিলিজ নিয়ে কাজ করতে হবে না

উপসংহার

এই নিবন্ধে, আমরা পাইথন গ্লোবাল ইন্টারপ্রেটার লক সম্পর্কে শিখেছি, এর গুরুত্ব এবং কেন সরাসরি পাইথন থেকে সরানো যাবে না।


  1. পাইথন ব্যতিক্রম লগ করার সেরা উপায় কি?

  2. পাইথনে অ্যাসার্ট স্টেটমেন্টের ব্যবহার কী?

  3. পাইথন ফাংশন নামের অনুমোদিত অক্ষর কি কি?

  4. পাইথনে বিশ্বব্যাপী এবং স্থানীয় ভেরিয়েবলের মধ্যে পার্থক্য কী?