আমি কেবল নৈমিত্তিক গো ব্যবহারকারী, সুতরাং নিম্নলিখিত লবণের দানা দিয়ে নিন।
উইকিপিডিয়া সবুজ থ্রেডকে " থ্রেডগুলি হিসাবে অন্তর্নিহিত অপারেটিং সিস্টেমের দ্বারা স্থানীয়ভাবে পরিবর্তে ভার্চুয়াল মেশিন (ভিএম) দ্বারা নির্ধারিত হয়" হিসাবে সংজ্ঞায়িত করে । সবুজ থ্রেডগুলি কোনও নেটিভ ওএস সক্ষমতার উপর নির্ভর না করে মাল্টিথ্রেডেড এনভায়রনমেন্টগুলি অনুকরণ করে এবং তারা কার্নেল স্পেসের পরিবর্তে ব্যবহারকারীর স্পেসে পরিচালিত হয়, যার ফলে নেটিভ থ্রেড সমর্থন নেই এমন পরিবেশে কাজ করতে সক্ষম হয়।
গো (বা আরও দুটি বিদ্যমান বাস্তবায়ন) কেবলমাত্র স্থানীয় কোড উত্পাদনকারী ভাষা - এটি কোনও ভিএম ব্যবহার করে না। তদতিরিক্ত, বর্তমান রানটাইম বাস্তবায়নের সময়সূচী ওএস স্তরের থ্রেডগুলিতে নির্ভর করে (এমনকি যখন GOMAXPROCS = 1 থাকে)। সুতরাং আমি মনে করি গো মডেলের জন্য সবুজ থ্রেড সম্পর্কে কথা বলা কিছুটা আপত্তিজনক।
অন্যান্য লোকেরা সম্মতিযুক্ত ব্যবস্থার (যেমন কর্টাইন বা থ্রেড বা লাইটওয়েট প্রক্রিয়াগুলির) সাথে বিভ্রান্তি এড়াতে গো লোকেরা গোরটাইন শব্দটি তৈরি করেছেন।
অবশ্যই, গো একটি এম: এন থ্রেডিং মডেল সমর্থন করে তবে এটি জাভা সবুজ থ্রেড মডেলের চেয়ে এরলং প্রক্রিয়া মডেলের থেকে অনেক বেশি কাছাকাছি দেখায়।
সবুজ থ্রেড (গোড়ার দিকে জেভিএম-তে প্রয়োগ করা হয়েছে) এর তুলনায় গো মডেলের কয়েকটি সুবিধা এখানে রয়েছে:
একাধিক কোর বা সিপিইউ কার্যকরভাবে কার্যকরভাবে ব্যবহার করা যেতে পারে, বিকাশকারীর পক্ষে স্বচ্ছ উপায়ে। গো দিয়ে, বিকাশকারীকে সমঝোতার যত্ন নেওয়া উচিত। গো রানটাইম সমান্তরালতার যত্ন নেবে। জাভা সবুজ থ্রেড প্রয়োগগুলি একাধিক কোর বা সিপিইউতে স্কেল করে নি।
সিস্টেম এবং সি কলগুলি শিডিয়ুলারের জন্য অবরুদ্ধ নয় (সমস্ত সিস্টেম কল, ইভেন্ট লুপগুলিতে কেবল মাল্টিপ্লেক্সড আই / ওসকে সমর্থন করে না)। ব্লকিং সিস্টেম কল করার পরে সবুজ থ্রেড বাস্তবায়ন পুরো প্রক্রিয়াটিকে অবরুদ্ধ করতে পারে।
অনুলিপি করা বা বিভক্ত স্ট্যাক। গো-তে, গোরোটিনের জন্য সর্বাধিক স্ট্যাক আকার সরবরাহ করার দরকার নেই। প্রয়োজনীয়তা হিসাবে স্ট্যাক ক্রমবর্ধমান বৃদ্ধি। এর একটি পরিণতি হ'ল গোরোটিনের জন্য খুব বেশি মেমরির প্রয়োজন হয় না (4KB-8KB), তাই তাদের বিপুল সংখ্যক আনন্দের সাথে তৈরি হতে পারে। গোরোটিন ব্যবহার তাই বিস্তৃত হতে পারে।
এখন, সমালোচনার সমাধান করতে:
গো দিয়ে, আপনাকে কোনও ইউজারস্পেস শিডিয়ুলার লিখতে হবে না: এটি ইতিমধ্যে রানটাইম সরবরাহ করে। এটি সফটওয়্যারটির একটি জটিল অংশ, তবে এটি গো ব্যবহারকারীদের নয়, গো বিকাশকারীদের সমস্যা। এর ব্যবহার গো ব্যবহারকারীদের জন্য স্বচ্ছ। গো বিকাশকারীদের মধ্যে, দিমিত্রি বৈকভ লকফ্রি / ওয়েটফ্রি প্রোগ্রামিংয়ে বিশেষজ্ঞ, এবং সময়সূচীর শেষ পারফরম্যান্স সম্পর্কিত সমস্যাগুলি সমাধান করতে তিনি বিশেষ আগ্রহী বলে মনে হয়। বর্তমান সময়সূচী বাস্তবায়ন নিখুঁত নয়, তবে এটি উন্নতি করবে।
সিঙ্ক্রোনাইজেশন কার্যকারিতা সমস্যা এবং জটিলতা নিয়ে আসে: গো এর সাথেও এটি আংশিক সত্য। তবে নোট করুন গো মডেলটি সিঙ্ক্রোনাইজেশন জটিলতা (যেমন যোগাযোগের মাধ্যমে মেমরি ভাগ করে নেওয়ার পরিবর্তে যোগাযোগ করে ডেটা ভাগ করে নেওয়ার) সীমাবদ্ধ করার জন্য চ্যানেলগুলির ব্যবহার এবং প্রোগ্রামের একটি পরিষ্কার পচনকে সমসাময়িক গোরোটিনগুলিতে প্রচার করার চেষ্টা করে। যাইহোক, রেফারেন্স গো বাস্তবায়ন একজন প্রোফাইলার এবং রেস ডিটেক্টরের মতো পারফরম্যান্স এবং সম্মতি সংক্রান্ত সমস্যাগুলি সমাধান করার জন্য বেশ কয়েকটি সরঞ্জাম সরবরাহ করে ।
পৃষ্ঠার ত্রুটি এবং "একাধিক থ্রেড ফ্যাকিং" সম্পর্কিত, দয়া করে নোট করুন নোটগুলি একাধিক সিস্টেম থ্রেডের উপর জোরোটাইন নির্ধারণ করতে পারে। যখন কোনও থ্রেড কোনও কারণে অবরুদ্ধ করা হয় (পৃষ্ঠা ত্রুটি, সিস্টেম কলগুলি ব্লক করা হয়), এটি অন্যান্য থ্রেডগুলি শিড্যুল্য করতে এবং অন্যান্য জোরোটাইনগুলি চালিয়ে যেতে বাধা দেয় না। এখন, এটি সত্য যে কোনও পৃষ্ঠার ত্রুটি ওএস থ্রেডকে ব্লক করে দেবে, এই থ্রেডে নির্ধারিত সমস্ত গোরোটাইনগুলি দিয়ে। তবে অনুশীলনে, গো হিপ মেমরিটি সরে যাওয়ার কথা নয়। জাভাতে এটি একই হবে: আবর্জনা সংগ্রহ করা ভাষাগুলি যাইহোক ভার্চুয়াল মেমরির খুব ভাল জায়গা করে না। যদি আপনার প্রোগ্রামটিকে অবশ্যই পৃষ্ঠার ত্রুটিটিকে একটি করুণ উপায়ে পরিচালনা করতে পারে, যদি এটি সম্ভবত কিছু অফ-হিপ মেমরি পরিচালনা করতে হয়। এই ক্ষেত্রে,
সুতরাং আইএমও, গোরোটাইনগুলি সবুজ থ্রেড নয় এবং গো ভাষা এবং বর্তমান প্রয়োগগুলি বেশিরভাগ ক্ষেত্রে এই সমালোচনাগুলিকে সম্বোধন করে।