থ্রেড বনাম (কাঁটাচামচ) প্রক্রিয়া


9

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


2
স্ট্যাকওভারফ্লো দেখুন। সেখানে বেশ কয়েকটি প্রশ্নোত্তর রয়েছে যা এর অংশ ব্যাখ্যা করেছে।
হেন্ক ল্যাঙ্গভেল্ড

উত্তর:


13

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

ক্লোন () কল (ম্যান 2 ক্লোন) ব্যবহার করে থ্রেডিং এবং ফর্কিংয়ের কাজ উভয়ের অন্তর্নিহিত:

কাঁটাচামচ (2) এর বিপরীতে, ক্লোন () শিশু প্রক্রিয়াটিকে কলিং প্রক্রিয়া, যেমন মেমরির স্থান, ফাইল বর্ণনাকারীর সারণী এবং সিগন্যাল হ্যান্ডলারের সারণীর মতো কলিং প্রক্রিয়ার সাথে তার সম্পাদন প্রসঙ্গে কিছু অংশ ভাগ করতে দেয়। (নোট করুন যে এই ম্যানুয়াল পৃষ্ঠায়, "কলিং প্রক্রিয়া" সাধারণত "প্যারেন্ট প্রসেস" এর সাথে মিলে যায় But তবে নীচে CLONE_PARENT বর্ণনা দেখুন))

ক্লোন () এর প্রধান ব্যবহার হ'ল থ্রেডগুলি বাস্তবায়িত করা: একটি প্রোগ্রামে নিয়ন্ত্রণের একাধিক থ্রেড যা ভাগ করে নেওয়া মেমরির স্থানে একই সাথে চলমান।

ক্লোন () তে পাস করা পতাকাগুলি থেকে পার্থক্যগুলি আসে। ম্যান পৃষ্ঠা থেকে আপনি দেখতে পাচ্ছেন, কাঁটাচামচ এবং থ্রেডিং ক্লোন () এর পূর্বনির্ধারিত পরামিতিগুলির একটি সেট মাত্র। তবে এটির সাহায্যে কেউ কাস্টম স্টাফও করতে পারে।


1
UHM? কি? দয়া করে বিষয়টির প্রতিটি বই সম্পর্কে পুনরায় পড়ুন, কারণ প্রক্রিয়াগুলির জন্য পৃথক মেমরির স্থানটি এক বিশাল ব্যাপার। ক্র্যাশকারী কোডটিকে "ধরা" সহায়তা করে, অন্যদিকে কার্নেলটি এমন একটি প্রক্রিয়াটি মেরে ফেলবে যেখানে কোনও পৃথক থ্রেড হাইওয়াইয়ার / ট্রান্সাসেস করে।
0xC0000022L

3
@ 0xC0000022L আপনার যুক্তি উত্তরটির সাথে বিরোধিতা করে না, যেমনটি আমার কাছে মনে হয়।
রুসলান

1
@ রুসলান: আমি আলাদা হতে অনুরোধ করছি: "ধারণাটি [...] একই রকম"? থ্রেডের পিছনে ধারণাটি সত্যই সামঞ্জস্যপূর্ণ, তবে প্রক্রিয়াগুলির জন্য এটি সম্পূর্ণ আলাদা গল্প।
0xC0000022L

4
@ 0xC0000022L আপনি ভি 13 এর উত্তরের গুরুত্বপূর্ণ অংশটি মিস করেছেন: "আপনি মৃত্যুদন্ডের পথটি কাঁটাচামচ করেন" - প্রশ্নটি থ্রেডগুলি কীভাবে তৈরি করা হয় তা সম্পর্কে নয়, থ্রেড এবং প্রক্রিয়াগুলির মধ্যে পার্থক্য কী তা নয়
ইজকাটা

@ ইজকাটা: মোটেও নয়। আমি কেবল ধরেছি যে এটি সঠিক দাবি নয়।
0xC0000022L

8

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

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

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


1
"মাল্টি-থ্রেড শিডিয়ুলিং হ্যান্ডলিং করা কঠিন এবং প্রায়শই ভুলভাবে করা হয়েছিল" উদ্ধৃতি আবশ্যক। ব্যবহারকারী-স্পেস থ্রেড প্রয়োগ করা কোনও সমস্যা নয়। ব্যবহারকারীর-স্পেস থ্রেডগুলির সমস্যা হ'ল কোনও থ্রেড যদি একটি ব্লকিং সিস্টল করে তবে সমস্ত থ্রেড ব্লক হয়ে যায়। এটি এড়ানোর একমাত্র উপায় হ'ল সিস্টেম স্তরের থ্রেড ব্যবহার করা।
বাকুরিউ

1
মজার বিষয়, উইন্ডোজ ইউনিক্সের এই উদ্ভাবনকে অন্তর্ভুক্ত করেনি: এর সাথে এর CreateProcess()মতো কিছু নেই fork()
রুসলান

2
@ বাকুরিউ - মাল্টিপ্রসেসিং শিডিয়ুলার নির্মাণ, ন্যায্যতা বজায় রাখা, অনাহার এড়ানো, অগ্রাধিকার পরিচালনা করা ইত্যাদি বিষয়ে যে কোনও নিবন্ধের সন্ধান করুন etc. যেমন আপনি বলছেন সমস্যা হিসাবে ব্যবহারকারী-স্পেস থ্রেড প্রয়োগ করা নয়। তুচ্ছ উদাহরণগুলি নির্ধারণ করা কঠিন।
এমপিজেডে

@ রুসলান: উইন্ডোজে কেউ কাঁটাচামচ করতে পারেন, এটি কেবল উইন 32 এপিআইয়ের অংশ নয়। নেববেটের "উইন্ডোজ এনটি / 2000 নেটিভ এপিআই" পড়ুন। তাঁর একটি বাস্তবায়ন রয়েছে যা নকল করে fork()
0xC0000022L

3

থ্রেড এবং ফর্কিং আসলে দুটি ভিন্ন ধারণা, উভয়ই ইউনিক্স / লিনাক্স সিস্টেমে বিদ্যমান (এবং উভয়ই সি / সি ++ ব্যবহার করা যেতে পারে)।

কাঁটাচামচ () এর ধারণাটি (খুব মূলত) একটি পৃথক প্রক্রিয়া তৈরি করা যার প্যারেন্ট প্রসেসের মতো একই এক্সিকিউশন কোড থাকে এবং যা কাঁটা লাইনে কার্যকর করা শুরু করে। এক্সিকিউটিভ ফাংশনগুলির সাথে কাঁটাচামচ ব্যবহারের উদ্দেশ্য হ'ল এক্সিকিউটিভ ফাংশনগুলি প্রসেসটি বন্ধ করে দেয় যা তাদের শেষ হওয়ার সাথে সাথে ডাকে। সুতরাং, আপনি সাধারণত কাঁটাচামচ করে প্রতিটি প্রক্রিয়ার পিআইডি পেয়ে থাকেন (সন্তানের সর্বদা 0 থাকে) এবং সন্তানের নির্বাহী ক্রিয়াকলাপটি শেষ না হওয়া পর্যন্ত পিতামাতাকে অপেক্ষা করুন।

থ্রেডগুলি সমান্তরালতার জন্য ব্যবহৃত হয় (মনে রাখবেন যে পিতা-মাতা সন্তানের জন্য অপেক্ষা করে, সাধারণত, একটি কাঁটাযুক্ত প্রোগ্রামে)। সি / সি ++ এ (যেমন গুগল অনুসন্ধান করুন) তে পাইথ্রেডের মতো একটি থ্রেড মূল প্রক্রিয়ার সমান্তরালে চলবে এবং মূল প্রোগ্রামের সাথে বৈশ্বিক পরিবর্তনশীল এবং গ্লোবাল ফাংশনগুলি ভাগ করতে পারে। যেহেতু জাভা থ্রেডগুলি একই রকম আচরণ করে, তাই আমি কল্পনা করব যে তারা এই থ্রেডগুলির মতো একটি কাঁটাচামড়ার প্রক্রিয়ার চেয়ে বেশি কাজ করে।

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

সম্পাদনা # 1

কাঁটাচামচ এবং থ্রেডগুলি কীভাবে ডাকা এবং ব্যবহার করা যেতে পারে তার এই উদাহরণগুলি দেখুন। মূল প্রোগ্রামে এক্সিকিউটিভ ফাংশনগুলির আচরণ এবং তার প্রভাবগুলি দয়া করে নোট করুন।

http://www.jdembrun.com:4352/computerScience/forkVSthread.zip


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

কাঁটাচামচ বিষয়টিতে, আমি আমার ওএস শিক্ষককে উদ্ধৃত করছি। তিনি আমাদের যা বলেছিলেন সে অনুসারে, হ্যাঁ, কাঁটাচামচটি সমান্তরালভাবে চালানোর জন্য ব্যবহার করা যেতে পারে, তবে এটি যদি একটি এক্সিকিউটিভ ফাংশন ব্যবহার করে, তবে এটিই শেষ হবে। যেমন pthread, এটি উদাহরণ হিসাবে বোঝানো হয়েছিল।
jaread7

এক্সেক কলারের কোডের শেষ কল হবে, কাঁটাযুক্ত প্রক্রিয়ার শেষ নির্দেশ নয়। কাঁটাচামচ প্রক্রিয়াটি এক্সিকিউড কোড চালানোর জন্য লাইভ করবে।
মাদুর

আপনার মন্তব্যগুলি আমাকে এই বিষয়গুলি পরীক্ষা করার জন্য উত্সাহিত করেছে। আমি কিছু সি ++ প্রোগ্রাম লিখেছি যা কাঁটা বনাম থ্রেডে ব্যবহৃত হওয়ার সময় এক্সিকিউটিভ ফাংশনগুলির আচরণ এবং প্রোগ্রামগুলিতে তাদের প্রভাবগুলি প্রদর্শন করে। উপরে সম্পাদনা দেখুন।
jaread7

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

1

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

স্ট্যাকওভারফ্লোতে এর সাথে ইতিমধ্যে বেশ কয়েকটি প্রশ্ন রয়েছে:

  1. জেভিএম নেটিভ থ্রেডস , আরও বিশদের জন্য এই উত্তরটি দেখুন।

  2. অ্যাপাচে দুটি প্রকারের এমপিএম রয়েছে: থ্রেড প্রতি এক প্রক্রিয়া সহ প্রেফের্ক এবং ওয়ার্কার, যা একাধিক থ্রেড পরিচালনা করে: অ্যাপাচি এমপিএম । এর রেফারেন্সটি দেখুনcodebucket


1

যদি কাঁটাচামচ, কোনও প্রক্রিয়া ঘটাতে কাঁটাচামচ + এক্সকে ব্যবহার করে, থ্রেডিংয়ের জন্য উচ্চ স্তরের সংস্করণটি কী? জেভিএম বা কর্মী এমপিএম কীভাবে থ্রেড স্প্যান করে?

এটি প্ল্যাটফর্ম নির্দিষ্ট, তবে লিনাক্সে এবং আমি ধরে নেব যে তারা আরও অনেক পসিক্স অনুবর্তী সিস্টেমগুলি ব্যবহার করবে যা তারা ব্যবহারযোগ্য থ্রেডিং এপিআই, পিথ্রেডগুলির স্থানীয় বাস্তবায়ন ব্যবহার করে । উদাহরণ:

#include <pthread.h>

pthread_t tid;
pthread_create(&tid, NULL, somefunc, NULL);

somefuncএটি কার্যকর করার প্রথম পয়েন্ট হিসাবে একটি নতুন থ্রেড কলিং শুরু করে ।

আপনি থ্রেডগুলিও তৈরি করতে পারেন - কাঁটাচামচ থেকে পৃথক যে তারা পিতৃতান্ত্রিক প্রক্রিয়াটির একই গ্লোবাল হিপ মেমরির স্থানটি ভাগ করে , তার সদৃশ অনুলিপি না পেয়ে (তবে প্রতিটি থ্রেড নোট করুন যা তাদের নিজস্ব স্বতন্ত্র স্ট্যাক মেমরি দিয়ে কার্যকর করা হয় ) - সঙ্গে clone()সিস্টেম কল, যা কি pthreads উপরে নির্মিত হয়।

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