গো-ল্যাংস গোরটাইন পুলগুলি কি কেবল সবুজ থ্রেড রয়েছে?


47

ভাষ্যকার এখানে সবুজ থ্রেডের নিম্নলিখিত বা সমালোচনা করেন:

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

হঠাৎ করে আপনি একটি ইউজারস্পেস শিডিয়ুলার লিখতে বাধ্য হন এবং অনুমান করতে পারেন যে একটি শিডিয়ুলার লিখতে সত্যিই কষ্টসাধ্য যা একটি আরও ভাল কাজ করতে চলেছে যে লিনাক্সের সময়সূচী যাতে এর বহু বছরের প্রচেষ্টা রয়েছে put এখন আপনি এম সি শারীরিক থ্রেডগুলিতে ম্যান এন গ্রিন থ্রেডের জন্য আপনার শিডিয়ুল চান যাতে আপনাকে সিঙ্ক্রোনাইজেশন সম্পর্কে চিন্তা করতে হবে। সিঙ্ক্রোনাইজেশন কর্মক্ষমতা সমস্যা নিয়ে আসে তাই আপনি এখনই শুরু করুন একটি নতুন লকলেস খরগোশের গর্ত নীচে। একটি সঠিক উচ্চতর যুগ্ম শিডিয়ুলার তৈরি করা সহজ কাজ নয়।

আরেকটি সমালোচক এখানে আছেন :

একক প্রক্রিয়া একাধিক থ্রেড নকল অনেক সমস্যা আছে। এর মধ্যে একটি হ'ল সমস্ত নকল থ্রেড যে কোনও পৃষ্ঠা দোষে স্টল করে।

- আমার প্রশ্ন হল করছে -যেতে যেতে ল্যাঙ এর goroutines (ক ডিফল্ট পুকুর জন্য) শুধু সবুজ থ্রেড? যদি তাই হয় - তারা কি উপরে সমালোচনাগুলির সমাধান করে?

উত্তর:


67

আমি কেবল নৈমিত্তিক গো ব্যবহারকারী, সুতরাং নিম্নলিখিত লবণের দানা দিয়ে নিন।

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

গো (বা আরও দুটি বিদ্যমান বাস্তবায়ন) কেবলমাত্র স্থানীয় কোড উত্পাদনকারী ভাষা - এটি কোনও ভিএম ব্যবহার করে না। তদতিরিক্ত, বর্তমান রানটাইম বাস্তবায়নের সময়সূচী ওএস স্তরের থ্রেডগুলিতে নির্ভর করে (এমনকি যখন GOMAXPROCS = 1 থাকে)। সুতরাং আমি মনে করি গো মডেলের জন্য সবুজ থ্রেড সম্পর্কে কথা বলা কিছুটা আপত্তিজনক।

অন্যান্য লোকেরা সম্মতিযুক্ত ব্যবস্থার (যেমন কর্টাইন বা থ্রেড বা লাইটওয়েট প্রক্রিয়াগুলির) সাথে বিভ্রান্তি এড়াতে গো লোকেরা গোরটাইন শব্দটি তৈরি করেছেন।

অবশ্যই, গো একটি এম: এন থ্রেডিং মডেল সমর্থন করে তবে এটি জাভা সবুজ থ্রেড মডেলের চেয়ে এরলং প্রক্রিয়া মডেলের থেকে অনেক বেশি কাছাকাছি দেখায়।

সবুজ থ্রেড (গোড়ার দিকে জেভিএম-তে প্রয়োগ করা হয়েছে) এর তুলনায় গো মডেলের কয়েকটি সুবিধা এখানে রয়েছে:

  • একাধিক কোর বা সিপিইউ কার্যকরভাবে কার্যকরভাবে ব্যবহার করা যেতে পারে, বিকাশকারীর পক্ষে স্বচ্ছ উপায়ে। গো দিয়ে, বিকাশকারীকে সমঝোতার যত্ন নেওয়া উচিত। গো রানটাইম সমান্তরালতার যত্ন নেবে। জাভা সবুজ থ্রেড প্রয়োগগুলি একাধিক কোর বা সিপিইউতে স্কেল করে নি।

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

  • অনুলিপি করা বা বিভক্ত স্ট্যাক। গো-তে, গোরোটিনের জন্য সর্বাধিক স্ট্যাক আকার সরবরাহ করার দরকার নেই। প্রয়োজনীয়তা হিসাবে স্ট্যাক ক্রমবর্ধমান বৃদ্ধি। এর একটি পরিণতি হ'ল গোরোটিনের জন্য খুব বেশি মেমরির প্রয়োজন হয় না (4KB-8KB), তাই তাদের বিপুল সংখ্যক আনন্দের সাথে তৈরি হতে পারে। গোরোটিন ব্যবহার তাই বিস্তৃত হতে পারে।

এখন, সমালোচনার সমাধান করতে:

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

  • সিঙ্ক্রোনাইজেশন কার্যকারিতা সমস্যা এবং জটিলতা নিয়ে আসে: গো এর সাথেও এটি আংশিক সত্য। তবে নোট করুন গো মডেলটি সিঙ্ক্রোনাইজেশন জটিলতা (যেমন যোগাযোগের মাধ্যমে মেমরি ভাগ করে নেওয়ার পরিবর্তে যোগাযোগ করে ডেটা ভাগ করে নেওয়ার) সীমাবদ্ধ করার জন্য চ্যানেলগুলির ব্যবহার এবং প্রোগ্রামের একটি পরিষ্কার পচনকে সমসাময়িক গোরোটিনগুলিতে প্রচার করার চেষ্টা করে। যাইহোক, রেফারেন্স গো বাস্তবায়ন একজন প্রোফাইলার এবং রেস ডিটেক্টরের মতো পারফরম্যান্স এবং সম্মতি সংক্রান্ত সমস্যাগুলি সমাধান করার জন্য বেশ কয়েকটি সরঞ্জাম সরবরাহ করে ।

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

সুতরাং আইএমও, গোরোটাইনগুলি সবুজ থ্রেড নয় এবং গো ভাষা এবং বর্তমান প্রয়োগগুলি বেশিরভাগ ক্ষেত্রে এই সমালোচনাগুলিকে সম্বোধন করে।


1
প্রশ্নের একটি দুর্দান্ত এবং বিস্তারিত প্রতিক্রিয়া :)
টাক্সডুড

1
আমি এই উত্তরটি ভালবাসি, তবে ওএস-থ্রেডগুলি কীভাবে / কখন তৈরি হয় তার কোনও উল্লেখ আছে?
লার্স

1
গো ল্যাঙ্গুয়েজের সবচেয়ে বড় অসুবিধা হ'ল এটি প্রতিটি ব্লকিং সিস্টেম কলের জন্য একটি কার্নেল থ্রেড তৈরি করে!
ব্যবহারকারী 1870400

8
নোট করুন যে উইকিপিডিয়ায় "সবুজ থ্রেড" নিবন্ধটি "স্ট্রিমগুলিতে রানটাইম লাইব্রেরি বা ভার্চুয়াল মেশিন (ভিএম) দ্বারা নির্ধারিত হয়েছে" হিসাবে পরিবর্তিত হয়েছে ; যার অর্থ এই সংজ্ঞা অনুসারে আপনার উত্তরটি আর সঠিক হবে না, যেমন গো রানটাইম সময়সূচী / পরিচালনা করে। আমি মনে করি এটি ওএস-থ্রেডের বিপরীতে ব্যবহারকারী-স্পেস থ্রেড হিসাবে সবুজ থ্রেডগুলি সংজ্ঞায়িত করা আরও সহায়ক। এবং তারপরে, হ্যাঁ, গোরোটাইনগুলি অবশ্যই সবুজ থ্রেড।
mknecht

1
দ্বিতীয় যে @ এম কেএনচেট এটি ভিএম সম্পর্কে নয়, এটি রানটাইম সম্পর্কে। এবং গো অবশ্যই একটি রানটাইম আছে। (যা থ্রেডিং মডেল এবং আবর্জনা সংগ্রহ পরিচালনা করে)।
টিম হার্পার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.