পাইথনের গ্লোবাল ইন্টারপ্রেটার লকের কাজ ঠিক কী? বাইটকোডে সংকলিত অন্যান্য ভাষাগুলি কি কি একই জাতীয় প্রক্রিয়া ব্যবহার করে?
পাইথনের গ্লোবাল ইন্টারপ্রেটার লকের কাজ ঠিক কী? বাইটকোডে সংকলিত অন্যান্য ভাষাগুলি কি কি একই জাতীয় প্রক্রিয়া ব্যবহার করে?
উত্তর:
সাধারণভাবে, যে কোনও থ্রেড সুরক্ষা সমস্যার জন্য আপনার লক সহ আপনার অভ্যন্তরীণ ডেটা কাঠামো রক্ষা করতে হবে। এটি বিভিন্ন স্তরের গ্রানুলারিটির সাথে করা যেতে পারে।
আপনি সূক্ষ্ম দানযুক্ত লকিং ব্যবহার করতে পারেন, যেখানে প্রতিটি পৃথক কাঠামোর নিজস্ব লক থাকে।
আপনি মোটা দানাদার লকিং ব্যবহার করতে পারেন যেখানে একটি লক সমস্ত কিছু রক্ষা করে (জিআইএল পদ্ধতির)।
প্রতিটি পদ্ধতির বিভিন্ন উপকারিতা এবং কনস রয়েছে। সূক্ষ্ম দানযুক্ত লকিং আরও বেশি সমান্তরালতার অনুমতি দেয় - দুটি থ্রেড সমান্তরালে কার্যকর করতে পারে যখন তারা কোনও সংস্থান ভাগ করে না। তবে সেখানে অনেক বড় প্রশাসনিক ওভারহেড রয়েছে। কোডের প্রতিটি লাইনের জন্য আপনার কয়েকটি লক অর্জন এবং ছেড়ে দিতে হবে।
মোটা দানাদার পদ্ধতির বিপরীত। দুটি থ্রেড একই সাথে চলতে পারে না, তবে একটি পৃথক থ্রেড দ্রুত চলবে কারণ এটি এত বেশি হিসাবরক্ষণ না করে। শেষ পর্যন্ত এটি একক থ্রেডেড গতি এবং সমান্তরালতার মধ্যে একটি ব্যবসায়ের উপর নেমে আসে।
পাইথনে জিআইএল অপসারণের জন্য কয়েকটি প্রচেষ্টা করা হয়েছে তবে একক থ্রেডযুক্ত মেশিনগুলির জন্য অতিরিক্ত ওভারহেড সাধারণত খুব বড় ছিল। কিছু ক্ষেত্রে লক যুক্তির কারণে মাল্টি-প্রসেসর মেশিনে এমনকি আসলে ধীর হতে পারে।
বাইটকোডে সংকলিত অন্যান্য ভাষাগুলি কি কি একই জাতীয় প্রক্রিয়া ব্যবহার করে?
এটির পরিবর্তিত হয় এবং এটি সম্ভবত কোনও ভাষা সম্পত্তি হিসাবে বাস্তবায়ন সম্পত্তি হিসাবে বিবেচনা করা উচিত নয়। উদাহরণস্বরূপ, পাইথন বাস্তবায়ন যেমন জাইথন এবং আয়রন পাইথন রয়েছে যা জিআইএল পদ্ধতির পরিবর্তে তাদের অন্তর্নিহিত ভিএম এর থ্রেডিং পদ্ধতির ব্যবহার করে। অতিরিক্তভাবে, রুবির পরবর্তী সংস্করণটি একটি জিআইএল প্রবর্তনের দিকে এগিয়ে চলেছে বলে মনে হচ্ছে ।
নিম্নলিখিত সরকারী পাইথন / সি এপিআই রেফারেন্স ম্যানুয়াল থেকে :
পাইথন দোভাষী পুরোপুরি থ্রেড নিরাপদ নয়। একাধিক-থ্রেড পাইথন প্রোগ্রামগুলিকে সমর্থন করার জন্য, পাইথন অবজেক্টগুলিকে নিরাপদে অ্যাক্সেস করার আগে একটি গ্লোবাল লক থাকতে হবে যা বর্তমান থ্রেডের কাছে রাখা উচিত। লক ব্যতীত, এমনকি সহজতম ক্রিয়াকলাপগুলি একটি বহু-থ্রেড প্রোগ্রামে সমস্যা সৃষ্টি করতে পারে: উদাহরণস্বরূপ, যখন দুটি থ্রেড একই সাথে একই বস্তুর রেফারেন্স গণনা বৃদ্ধি করে, তখন রেফারেন্স গণনাটি কেবল একবারের পরিবর্তে কেবল একবার বৃদ্ধি করা যেতে পারে।
সুতরাং, নিয়মটি বিদ্যমান যে কেবল যে থ্রেডটি বিশ্বব্যাপী ইন্টারপ্রেটার লকটি অর্জন করেছে তা পাইথন অবজেক্টগুলিতে কাজ করতে পারে বা পাইথন / সি এপিআই ফাংশনগুলি কল করতে পারে। একাধিক-থ্রেড পাইথন প্রোগ্রামগুলিকে সমর্থন করার জন্য, দোভাষী নিয়মিতভাবে লকটি প্রকাশ করে এবং পুনরায় জিজ্ঞাসা করে - ডিফল্টরূপে প্রতি 100 বাইকোড নির্দেশাবলী (এটি সিস.সেটেকেকিনটারওয়াল ()) দিয়ে পরিবর্তন করা যেতে পারে। লকটি প্রকাশিত হয়েছে এবং কোনও ফাইল পড়া বা লেখার মতো আই / ও অপারেশনগুলিকে ব্লক করার আশেপাশে পুনরুদ্ধার করা হয়েছে, যাতে অন্যান্য থ্রেড চলতে পারে যখন I / O কে অনুরোধ করা থ্রেডটি I / O অপারেশনটি সম্পূর্ণ হওয়ার অপেক্ষায় থাকে।
আমি মনে করি এটি বেশ ভালভাবে ইস্যুটি সংযুক্ত করে।
গ্লোবাল ইন্টারপ্রেটার লক হ'ল একটি বড় মিউটেক্স-টাইপ লক যা রেফারেন্স কাউন্টারগুলিকে হোজে যাওয়ার হাত থেকে রক্ষা করে। আপনি যদি খাঁটি অজগর কোডটি লিখতে থাকেন তবে পর্দার আড়ালে এইগুলি ঘটে থাকে তবে আপনি পাইথনকে সিটিতে এম্বেড করে রাখলে আপনাকে স্পষ্টভাবে লকটি নিতে / ছেড়ে দিতে হতে পারে।
পাইথন বাইকোডে সংকলিত হওয়ার সাথে এই প্রক্রিয়া সম্পর্কিত নয়। এটি জাভা জন্য প্রয়োজন হয় না। আসলে, এটি জাইথনের জন্যও নেই (পাইথনটি jvm তে সংকলিত)।
আরো দেখুন এই প্রশ্নের
পারল 5 এর মতো পাইথন থ্রেড নিরাপদ থাকার জন্য গ্রাউন্ড থেকে ডিজাইন করা হয়নি। থ্রেডগুলি সত্যের পরে গ্রাফ্ট করা হয়েছিল, সুতরাং বিশ্বব্যাপী দোভাষী লকটি পারস্পরিক বর্জন বজায় রাখার জন্য ব্যবহৃত হয় যেখানে দোভাষীর তলদেশে নির্দিষ্ট সময়ে কেবলমাত্র একটি থ্রেড কোড সম্পাদন করে।
পৃথক পাইথন থ্রেডগুলি প্রায়শই প্রায়শই লকটিকে সাইকেল চালিয়ে দোভাষী দ্বারা সমবায়ভাবে মাল্টিটাস্ক করা হয়।
আপনি যখন সি থেকে পাইথনের সাথে কথা বলছেন তখন নিজেই লকটি ধরার দরকার হয় যখন অন্য পাইথন থ্রেডগুলি এই প্রোটোকলটিতে 'বেছে নেওয়ার' জন্য সক্রিয় থাকে এবং নিশ্চিত হয়ে থাকে যে আপনার পিছনে কোনও অনিরাপদ ঘটে না।
অন্যান্য সিস্টেমে যে একক থ্রেড হেরিটেজ রয়েছে যা পরে মুলিথ্রেড সিস্টেমগুলিতে বিবর্তিত হয়েছিল তাদের প্রায়শই এই ধরণের কিছু প্রক্রিয়া থাকে। উদাহরণস্বরূপ, লিনাক্স কার্নেলের প্রারম্ভিক এসএমপি দিনগুলি থেকে "বিগ কার্নেল লক" রয়েছে। ধীরে ধীরে মাল্টি-থ্রেডিং কর্মক্ষমতা ইস্যুতে পরিণত হওয়ার সাথে সাথে এই ধরণের লকগুলি ছোট ছোট টুকরো করে ভেঙে ফেলার চেষ্টা করতে বা লক-ফ্রি অ্যালগরিদমগুলি এবং ডেটা স্ট্রাকচারগুলি দিয়ে প্রতিস্থাপন করা সম্ভব হবে যেখানে থ্রুপুট সর্বাধিকীকরণ সম্ভব।
reiserfs
- এটি সম্পর্কে আমি জানি না এমন একমাত্র আসল কারণ)।
আপনার দ্বিতীয় প্রশ্ন সম্পর্কে, সমস্ত স্ক্রিপ্টিং ভাষা এটি ব্যবহার করে না, তবে এটি কেবল তাদের কম শক্তিশালী করে তোলে। উদাহরণস্বরূপ, রুবির থ্রেড সবুজ এবং দেশীয় নয়।
পাইথনে, থ্রেডগুলি দেশীয় হয় এবং জিআইএল কেবল তাদের আলাদা আলাদা কোরগুলিতে চলতে বাধা দেয়।
পার্লে, থ্রেডগুলি আরও খারাপ। তারা কেবল পুরো দোভাষীকে অনুলিপি করে এবং পাইথনের মতো ব্যবহারযোগ্য হতে পারে না।
হয়তো বিডিএফএলের এই নিবন্ধটি সাহায্য করবে।