কেন সবুজ থ্রেড না?


33

যদিও আমি জানি যে এর উপর প্রশ্নগুলি ইতিমধ্যে coveredেকে দেওয়া হয়েছে (উদাঃ https://stackoverflow.com/questions/5713142/green-threads-vs-non-green-threads ), আমি মনে করি না যে আমি একটি সন্তোষজনক উত্তর পেয়েছি ।

প্রশ্নটি হল: কেন জেভিএমের সমর্থন সবুজ থ্রেড না?

এটি কোড-স্টাইল জাভা FAQ এ বলেছে :

একটি সবুজ থ্রেড জাভা ভার্চুয়াল মেশিন (জেভিএম) এর ক্রিয়াকলাপের একটি মোডকে বোঝায় যেখানে সমস্ত কোড একক অপারেটিং সিস্টেম থ্রেডে কার্যকর করা হয়।

আর এই বেশি java.sun.com :

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

আমার কাছে মনে হয় যে JVM- তে সিস্টেমের প্রক্রিয়াগুলির একটি পুল কোরগুলির সংখ্যার সমান হতে পারে এবং তারপরে সবুজ থ্রেড চালাতে পারে। এটি যখন আপনার খুব বেশি সংখ্যক থ্রেড থাকে যা প্রায়শই ব্লক হয় তখন এটি বেশ কয়েকটি বড় সুবিধা দিতে পারে (বেশিরভাগ কারণ বর্তমান জেভিএমের ক্যাপ থ্রেডের সংখ্যা)।

থটস?


5
আমার কাছে প্রশ্নটি মনে হচ্ছে: সবুজ থ্রেড কেন? একাধিক প্রক্রিয়ার মাধ্যমে জেভিএম স্তরে এটিকে অনুকরণ করে পুনরায় কেন মাল্টিথ্রেডিং প্রবর্তন করবেন? প্রোগ্রামারদের স্পাডিং থ্রেডগুলির সাথে আরও উদার হওয়া (এবং আমি নিশ্চিত নই যে এটির একটি সুবিধা) এর চেয়ে আরও বেশি লাভের জন্য এটি প্রচুর ব্যথা এবং ওভারহেড।

4
ঠিক আছে, এটি একটি সমবর্তী প্রোগ্রামিং মডেল সম্পর্কে যা স্কেল করে having বর্তমানে জাভাতে, আপনি যদি স্কেলিবিলিটি চান তবে আপনি নিজের থ্রেড পুলের সাহায্যে এনআইওতে চলে যান। কমপক্ষে, এটি আমার বোঝাপড়া।
redjamjar

3
< আক্কা.আইটি > এর মতো জিনিসের উপস্থিতি যা হালকা ওজনের থ্রেডকে সমর্থন করে তাও আমাকে ভাবতে বাধ্য করে যে এর প্রয়োজন আছে। আসলে, শুধু <বেশ একটি ভাল আলোচনা এখানে পাওয়া stackoverflow.com/questions/7458782/... >
redjamjar

2
@ ডেলানন কারণ দেশীয় থ্রেডের ব্যয়ের জন্য প্রসঙ্গের সুইচ। কনটেক্সট স্যুইচ এবং ইন্টারপ্রসেস সিঙ্কের জন্য সবুজ থ্রেডের অনেক কম ওভারহেড রয়েছে। এছাড়াও, সবুজ থ্রেডগুলির পরিমাণ কার্যত সীমাহীন (ভিএম প্রক্রিয়াটির জন্য খুব বেশি চাপ ছাড়াই এটি কয়েক হাজার হতে পারে), যখন ওএস এবং মেমরির ওভারহেড দ্বারা নেটিভ থ্রেডের পরিমাণ সীমিত থাকে।
পেরেক্রাকাম

জেভিএম সরাসরি দেশী থ্রেড সমর্থন করার আগে এটি অনেক দিন সময় নিয়েছিল। সবুজ থ্রেডগুলি তখন পর্যন্ত মধ্যবর্তী সমাধান ছিল।
থোরবজর্ন রাভন অ্যান্ডারসন

উত্তর:


29

আমি মনে করি JVM সবুজ থ্রেড ত্যাগ করে নেটিভ থ্রেডে চলেছে। এটি দুটি সাধারণ কারণে ছিল: সবুজ থ্রেডগুলি খোলামেলা আবর্জনা ছিল, এবং সান এ উপলব্ধ সীমিত বিকাশকারী প্রচেষ্টা সহ মাল্টি-কোর প্রসেসরগুলিকে সমর্থন করার প্রয়োজন ছিল was

এটি লজ্জাজনক ছিল - সবুজ থ্রেডগুলি আরও ভাল বিমূর্ততা সরবরাহ করে, সমঝোতাটিকে কোনও কার্যকর সরঞ্জাম হিসাবে পরিণত করার অনুমতি দেয় না st তবে বেশ কয়েকটি প্রতিবন্ধকতা অতিক্রম করতে না পারলে সবুজ থ্রেডগুলির কোনও ব্যবহার নেই:

  • তাদের অবশ্যই উপলভ্য সমস্ত সিপিইউ কোর ব্যবহার করা উচিত

  • কনটেক্সট স্যুইচিং অবশ্যই সস্তা হতে হবে

  • ইনপুট / আউটপুট কোন থ্রেড এটা নিযুক্ত ব্লক হতে পারে, কিন্তু না অন্য কোন থ্রেড এবং অবশ্যই সব অন্যান্য থ্রেড, যা কিছু প্রথম দিকে বাস্তবায়নের ক্ষেত্রে ছিল না।

আমি প্রায়শই ভাবছিলাম যে জাভাতে মাল্টি-থ্রেডিং কেন এত শক্ত তবে এটি এখন আরও স্পষ্ট হয়ে উঠছে - দেশীয় থ্রেডগুলিতে স্যুইচ করা শেষ পর্যন্ত এরকম ছিল যা হ'ল:

  • সমস্ত সিপিইউ কোর ব্যবহার করা ভাল

  • সত্যিকারের সমবর্তী হতে ভাল, স্বাধীন I / O ইত্যাদি সরবরাহ করা ভাল

  • প্রসঙ্গের স্যুইচিংয়ে ধীরে ধীরে (সেরা সবুজ থ্রেড প্রয়োগের সাথে তুলনা করা)

  • মেমরির সাথে ভয়াবহ লোভী, সুতরাং তাদের সর্বাধিক ব্যবহারেরযোগ্য সংখ্যা সীমাবদ্ধ করে

  • বাস্তব বিশ্বকে প্রকাশের জন্য কোনও ভিত্তিতে একটি দুর্বল বিমূর্ততা, এটি অবশ্যই অত্যন্ত সামঞ্জস্যপূর্ণ।

আজকাল, প্রচুর প্রোগ্রামার সময় এখন নন-ব্লকিং আই / ও, ফিউচার ইত্যাদির কোডিংয়ের মধ্যে চলে যায় এটি একটি বড় লজ্জার বিষয় যে আমাদের বিমূর্ততার আরও ভাল স্তর নেই।

তুলনা করার জন্য, এরলংয়ের পাশাপাশি নতুন গো ভাষা প্রচুর সম্মিলনের ভাল কাজ করে। তাদের সবার পিতামহী ওকাম রয়ে গেছে , এখনও একটি চলমান গবেষণা প্রকল্প।


আপনি পোস্ট করার সময় থেকে আমরা কতটা এগিয়ে চলেছি: ও
দিমিত্রি

3
হায়রে, মরিচা আরেকটি ভাষা যা আরও ভাল সংমিশ্রণ বিমূর্ততা ত্যাগ করে। তারাও সমবায় থ্রেড থেকে নেটিভ থ্রেডে যাওয়ার সিদ্ধান্ত নিয়েছে।
রিক -777

2
@ রিক-7777 মরিচা এটি করতে খুব কম স্তরের।
ম্যালকম

15

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

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

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


ওকাম এটি অফার করার দাবি করে। এটি ৮০-এর দশকে একটি উল্লেখযোগ্য ভাষা ছিল তবে এটি উন্নয়ন তহবিলের অভাবে ভুগেছে এবং ফলস্বরূপ এটি কেবল একটি গবেষণা কুলুঙ্গিতে পরিণত হয়েছিল। তবে সম্মতি সংক্রান্ত এর ধারণাগুলি এখনকার মতোই দৃ solid় এবং এখনও উন্নত হয়নি।
রিক -777

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

13

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

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


সুতরাং, যদিও স্পষ্ট করে বলা যায়, এটি এরলংয়ের একটি কার্যকর পদ্ধতি। এবং, জাভা মানসিকতার বিষয়গুলি উপেক্ষা করে, এটি আসলে সহায়তা করতে পারে?
redjamjar

1
@ রেডজামজার, এটি জাভাতে কার্যকর হওয়ার সম্ভাবনা নেই, ভাষা নিজেই এ জাতীয় ব্যবহারের পক্ষে উপযুক্ত নয়, এবং এর মূল (এবং একমাত্র) সুবিধা - গ্রন্থাগারগুলি ব্যবহারের জন্য প্রস্তুত বিশাল সংস্থান - এই ধরনের এলিয়েনের সাথে ভাল মানায় না won't প্রোগ্রামিং পদ্ধতির
এসকে-যুক্তি

হ্যাঁ আপনি যদি এই মডেলটি চান, কেবল এরলং ব্যবহার করুন, এটি আরও সহজতর আকারের ক্রম হবে
জ্যাচারি কে

1
জাভা! = জেভিএম, কেবল বলেছে :)
কামিল টমাক

1
@ ব্যান, এই "সুবিধাগুলি" কেবল তখনই বিদ্যমান যদি আপনার তুলনা করার মতো কিছুই না পাওয়া যায়
এসকে-যুক্তি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.