কাঁটাচামচ () এর উদ্দেশ্য কী?


88

লিনাক্সের অনেক প্রোগ্রাম এবং ম্যান পৃষ্ঠায় আমি কোড ব্যবহার করে দেখেছি fork()। আমাদের কেন ব্যবহার করা দরকার fork()এবং এর উদ্দেশ্য কী?


151
যাতে সমস্ত ডাইনিং দার্শনিক না খেয়ে থাকেন।
kenj0418

উত্তর:


109

fork()আপনি কীভাবে ইউনিক্সে নতুন প্রক্রিয়া তৈরি করেন। আপনি যখন কল করবেন তখন আপনি forkনিজের প্রক্রিয়াটির একটি অনুলিপি তৈরি করছেন যার নিজস্ব ঠিকানার স্থান রয়েছে । এটি একাধিক কর্মকে একে অপরের থেকে স্বতন্ত্রভাবে চালনার অনুমতি দেয় যদিও তাদের প্রত্যেককেই নিজের কাছে মেশিনের সম্পূর্ণ স্মৃতি রয়েছে।

এখানে এর কয়েকটি উদাহরণ ব্যবহার রয়েছে fork:

  1. আপনার শেলটিfork আপনাকে কমান্ড লাইন থেকে অনুরোধ করা প্রোগ্রামগুলি চালাতে ব্যবহার করে।
  2. মত ওয়েব সার্ভার Apache ব্যবহার forkপ্রতিটি যা তার নিজস্ব অ্যাড্রেস স্পেস মধ্যে অনুরোধ পরিচালনা একাধিক সার্ভারের প্রসেস তৈরি করতে। যদি একজন মারা যায় বা মেমরি ফাঁস হয়, অন্যরা ক্ষতিগ্রস্থ হয় না, তাই এটি দোষ সহ্য করার ব্যবস্থা হিসাবে কাজ করে।
  3. গুগল ক্রোমfork পৃথক প্রক্রিয়ার মধ্যে প্রতিটি পৃষ্ঠা হ্যান্ডেল করতে ব্যবহার করে। এটি এক পৃষ্ঠায় ক্লায়েন্ট-সাইড কোডটিকে আপনার পুরো ব্রাউজারটি নামিয়ে আনতে বাধা দেবে।
  4. forkকিছু সমান্তরাল প্রোগ্রামগুলিতে প্রসেস স্প্যান করতে ব্যবহৃত হয় ( এমপিআই ব্যবহার করে লেখাগুলি যেমন )। নোটটি থ্রেড ব্যবহার করা থেকে পৃথক , যার নিজস্ব ঠিকানা স্থান নেই এবং প্রক্রিয়াটির মধ্যে বিদ্যমান exist
  5. স্ক্রিপ্টিং ভাষাগুলি forkশিশু প্রক্রিয়াগুলি শুরু করতে অপ্রত্যক্ষভাবে ব্যবহার করে। উদাহরণস্বরূপ, প্রতিবার subprocess.Popenপাইথনের মতো কমান্ড ব্যবহার করার সময় আপনি forkএকটি শিশু প্রক্রিয়াজাত করেন এবং এর আউটপুট পড়েন। এটি প্রোগ্রামগুলিকে এক সাথে কাজ করতে সক্ষম করে।

forkশেলের সাধারণ ব্যবহারের ব্যবহার দেখতে এই জাতীয় কিছু দেখতে পারে:

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

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


বুলেট 5: 'প্রায়ই'? শুধু 'প্রায়শই'? কোনটি এটি ব্যবহার করে না, বা কোন পরিস্থিতিতে কাঁটাচামচ () ব্যবহার করা হচ্ছে না - এমন সিস্টেমগুলিতে যা কাঁটাচামচ সমর্থন করে (), এটি।
জোনাথন লেফলার

19
আশ্চর্যজনকভাবে যথেষ্ট, একে ক্রিয়েটপ্রসেস () বলা হয় - এই পাগল উইন্ডোজ ছেলেরা :-)
প্যাক্সিডিয়াবল

4
কখনই আপত্তি হয়নি যে "কমান্ড লাইন থেকে আপনি অনুরোধ করা প্রোগ্রামগুলি চালাতে কাঁটাচামচ ব্যবহার করে"!
Lazer

4
স্লাইডগুলির লিঙ্কটি ভাঙা হয়েছে
পিয়ার্তোনি

4
সকল উত্তর বলে যে fork()পথ ইউনিক্স একটি নতুন প্রসেস নির্মাণ করতে, কিন্তু গোঁড়া হবে, সেখানে অন্তত এক অন্য নন: posix_spawn()
ডেভিস্লোর

15

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

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

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


@ ভারডাম্পার ভাল ধরা!
ড্যানিয়েল সি সোব্রাল

9

কাঁটাচামচ () শিশু প্রক্রিয়া তৈরি করতে ব্যবহৃত হয়। যখন একটি কাঁটাচামচ () ফাংশন বলা হয়, একটি নতুন প্রক্রিয়া তৈরি হবে এবং কাঁটাচামচ () ফাংশন কলটি শিশু এবং পিতামাতার জন্য আলাদা মান প্রদান করবে।

যদি রিটার্নের মান 0 হয় তবে আপনি জানেন যে আপনি শিশু প্রক্রিয়া এবং যদি ফেরতের মানটি একটি সংখ্যা হয় (যা চাইল্ড প্রক্রিয়া আইডি হিসাবে ঘটে থাকে) তবে আপনি জানেন যে আপনি পিতামাতা। (এবং যদি এটি একটি নেতিবাচক সংখ্যা হয়, কাঁটাচামচ ব্যর্থ হয়েছিল এবং কোনও শিশু প্রক্রিয়া তৈরি করা হয়নি)

http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html


4
যদি না ফেরতের মান -1 না হয় তবে এক্ষেত্রে কাঁটাচামচ () ব্যর্থ হয়েছে।
জোনাথন লেফলার

8

কাঁটাচামচ () মূলত সেই প্রক্রিয়াটির জন্য শিশু প্রক্রিয়া তৈরি করতে ব্যবহৃত হয় যাতে আপনি এই ফাংশনটি কল করছেন used আপনি যখনই একটি কাঁটাচামচ () কল করবেন তখন শিশু আইডির জন্য এটি শূন্য দেয়।

এর মাধ্যমে আপনি পিতামাতার এবং সন্তানের জন্য বিভিন্ন ক্রিয়াকলাপ সরবরাহ করতে পারেন এবং মাল্টিথ্রেডিং বৈশিষ্ট্যটি ব্যবহার করতে পারেন।


6

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


আপনি কেন এমন একটি শিশু তৈরি করেন যা পিতামাতার সাথে সাদৃশ্যপূর্ণ এটির ব্যবহার কী?

4
এটি ঠিক একটি সৈন্য বনাম একক সৈনিক গঠনের মতো। আপনি কাঁটাচামচ করুন যাতে আপনার প্রোগ্রামটি একের পর এক পরিবর্তে আরও অনুরোধগুলি পরিচালনা করতে পারে।
ক্লাউডহেড

কাঁটাচামচ () সন্তানের উপর 0 এবং পিতামাতার উপর সন্তানের পিড দেয়। তারপরে শিশু তার প্রোগ্রামকে নতুন প্রোগ্রামের সাথে প্রতিস্থাপন করতে এক্সিকিউট () এর মতো কল ব্যবহার করতে পারে। এভাবেই প্রোগ্রামগুলি চালু করা হয়।
টড গাম্বলিন

প্রক্রিয়াগুলি অভিন্নতার খুব কাছাকাছি, তবে অনেকগুলি সূক্ষ্ম পার্থক্য রয়েছে। স্পষ্ট পার্থক্য হ'ল বর্তমান পিআইডি এবং প্যারেন্ট পিআইডি। লক আটকানো এবং সেমফোরগুলি সম্পর্কিত বিষয়গুলি রয়েছে। পসিক্সের জন্য কাঁটাচামচ (ম্যানুয়াল পৃষ্ঠা) পিতামাতা এবং সন্তানের মধ্যে 25 পার্থক্য তালিকাভুক্ত করে।
জোনাথন লেফলার

4
@ কার: একবার আপনার দুটি প্রক্রিয়া হয়ে গেলে সেগুলি সেখান থেকে পৃথকভাবে চালিয়ে যেতে পারে এবং এর মধ্যে একটির পুরোপুরি অন্য প্রোগ্রামের সাথে নিজেকে (এক্সেক্স ()) প্রতিস্থাপন করতে পারে।
ভ্যাটাইন

4

আপনি যদি অ্যাপ্লিকেশন লিখছেন তবে আপনাকে সম্ভবত প্রতিদিনের প্রোগ্রামিংয়ে কাঁটাচামচ ব্যবহার করার দরকার নেই।

এমনকি যদি আপনি চান যে আপনার প্রোগ্রামটি কোনও কাজ করার জন্য অন্য প্রোগ্রাম শুরু করতে পারে, তবে অন্যান্য সহজ ইন্টারফেস রয়েছে যা পর্দার পিছনে কাঁটাচামচ ব্যবহার করে, যেমন সি এবং পার্লের "সিস্টেম"।

উদাহরণস্বরূপ, আপনি যদি নিজের অ্যাপ্লিকেশনটি কোনও প্রোগ্রাম শুরু করতে চান যেমন বিসি আপনার জন্য কিছু গণনা করার জন্য, আপনি এটি চালানোর জন্য 'সিস্টেম' ব্যবহার করতে পারেন। একটি নতুন প্রক্রিয়া তৈরি করতে সিস্টেম একটি 'কাঁটাচামচ' করে, তারপরে একটি প্রক্রিয়াটি বিসিতে পরিণত করার জন্য 'এক্সিকিউট' করে। একবার বিসি সম্পূর্ণ হলে, সিস্টেমটি আপনার প্রোগ্রামে নিয়ন্ত্রণ ফিরিয়ে দেয়।

আপনি অন্যান্য প্রোগ্রামগুলিও অবিচ্ছিন্নভাবে চালাতে পারেন, তবে কীভাবে তা আমি মনে করতে পারি না।

আপনি যদি সার্ভার, শেল, ভাইরাস বা অপারেটিং সিস্টেম লিখতে থাকেন তবে আপনার কাঁটাচামচ ব্যবহার করার সম্ভাবনা বেশি।


আপনাকে ধন্যবাদ system()। আমি পড়ছিলাম fork()কারণ আমার সি কোডটি একটি অজগর স্ক্রিপ্ট চালানো চাই run
শিম ট্যাক্সি

4

কাঁটাচামচ নতুন প্রক্রিয়া তৈরি করে। কাঁটাচামচ ছাড়াই আপনার কাছে একটি ইউনিক্স সিস্টেম থাকবে যা কেবল ইনিম চালাতে পারে।


4

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

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

আসুন উপরের বিষয়গুলি পরিষ্কার করার জন্য এটি একটি উদাহরণ দিয়ে বুঝতে পারি। এই উদাহরণটি পিতামাতার এবং সন্তানের প্রক্রিয়াগুলিকে আলাদা করে না।

মনে করুন উপরের প্রোগ্রামটি কাঁটাচামচ () কল করার বিন্দু পর্যন্ত কার্যকর করে।

যদি কাঁটাচামচ () কলটি সফলভাবে সম্পাদন করা হয়, ইউনিক্স ঠিকানা জায়গাগুলির দুটি অভিন্ন অনুলিপি তৈরি করবে, একটি পিতামাতার জন্য এবং অন্যটি সন্তানের জন্য। উভয় প্রক্রিয়া কাঁটাচামচ () কল অনুসরণ করে পরবর্তী বিবৃতিতে তাদের সম্পাদন শুরু করবে। এই ক্ষেত্রে, উভয় প্রক্রিয়া অ্যাসাইনমেন্টে তাদের সম্পাদন শুরু করবে

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

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

আপনি যদি এই প্রোগ্রামটি চালনা করেন তবে আপনি স্ক্রিনে নিম্নলিখিতগুলি দেখতে পাবেন:

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


4
পাঠ্যের অনুলিপি-পেস্ট করার পরিবর্তে আপনি একটি লিঙ্ক মন্তব্য করতে পারেন: csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/create.html
চৈতন্য লাক্কুন্দি

3

মাল্টিপ্রসেসিং কম্পিউটিংয়ের কেন্দ্রবিন্দু। উদাহরণস্বরূপ, আপনি এখনও ইন্টারনেট ব্রাউজ করার সময় আপনার আইই বা ফায়ারফক্স আপনার জন্য একটি ফাইল ডাউনলোড করার জন্য একটি প্রক্রিয়া তৈরি করতে পারে। অথবা, আপনি যখন ওয়ার্ড প্রসেসরে কোনও ডকুমেন্ট প্রিন্ট করছেন তখন আপনি বিভিন্ন পৃষ্ঠাগুলি দেখতে পারেন এবং এর সাথে কিছু সম্পাদনা করতে পারেন।


3

প্রতিটি দেহ যেমন লিখেছে তেমন নতুন প্রক্রিয়া তৈরি করতে কাঁটা () ব্যবহার করা হয়।

এখানে আমার কোড যা বাইনারি গাছ আকারে প্রক্রিয়া তৈরি করে ....... এটি বাইনারি ট্রিতে প্রক্রিয়া তৈরি করতে চান এমন স্তরগুলির সংখ্যা স্ক্যান করতে বলবে

আউটপুট


2

কাঁটা () সিস্টেম কল কী তা প্রথমে বুঝতে হবে। আমাকে বিস্তারিত বলতে দাও

  1. কাঁটাচামচ () সিস্টেম কল পিতামাতার প্রক্রিয়াটির যথাযথ নকল তৈরি করে, এটি প্যারেন্ট স্ট্যাকের নকল তৈরি করে, গাদা, আরম্ভকৃত ডেটা, আনইনটিয়ালাইজড ডেটা তৈরি করে এবং কোডটি পিতামাতার প্রক্রিয়ার সাথে কেবল পঠন মোডে ভাগ করে।

  2. কাঁটাচামচ কল কল মেমরির অনুলিপি অনুলিপি ভিত্তিতে অনুলিপি করে, যখন অনুলিপি করার প্রয়োজন হয় তখন শিশু ভার্চুয়াল মেমরি পৃষ্ঠায় তৈরি করে page

এখন কাঁটাচামড়ার উদ্দেশ্য ():

  1. কাঁটাচামচ () যেখানে সার্ভারকে একাধিক ক্লায়েন্ট পরিচালনা করতে হয় সেখানে কাজের বিভাজন রয়েছে এমন জায়গায় ব্যবহার করা যেতে পারে, তাই পিতামাতাকে নিয়মিত ভিত্তিতে সংযোগটি গ্রহণ করতে হয়, সুতরাং সার্ভার প্রতিটি ক্লায়েন্টকে পঠন-লিখনের জন্য কাঁটাচামচ করে।

1

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

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


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

1

নতুন প্রক্রিয়া শুরু করার জন্য কাঁটা () বনাম কেবল একটি এক্সিকিউটিভ () ফাংশন থাকার পিছনে যুক্তিটি ইউনিক্স স্ট্যাক এক্সচেঞ্জের অনুরূপ প্রশ্নের উত্তরে ব্যাখ্যা করা হয়েছে ।

মূলত, যেহেতু কাঁটাচামচ বর্তমান প্রক্রিয়াটি অনুলিপি করে, কোনও প্রক্রিয়ার জন্য বিভিন্ন সম্ভাব্য সমস্ত বিকল্প ডিফল্টরূপে প্রতিষ্ঠিত হয়, সুতরাং প্রোগ্রামার তাদের সরবরাহ করে না।

উইন্ডোজ অপারেটিং সিস্টেমে, বিপরীতে, প্রোগ্রামারগুলিকে ক্রিয়েটপ্রসেস ফাংশনটি ব্যবহার করতে হবে যা অনেক বেশি জটিল এবং নতুন প্রক্রিয়াটির পরামিতিগুলি সংজ্ঞায়িত করার জন্য একটি বহুমুখী কাঠামো গড়ে তোলা দরকার।

সুতরাং, সংক্ষেপে বলতে গেলে, কাঁটাচামড়ার কারণ (বনাম মৃত্যুদণ্ড কার্যকর করা) নতুন প্রক্রিয়া তৈরির ক্ষেত্রে সরলতা।


0

একটি শিশু প্রক্রিয়া তৈরি করতে কাঁটাচামচ () সিস্টেম কল ব্যবহার। এটি পিতামাতার প্রক্রিয়ার হুবহু সদৃশ। কাঁটাচামড়া অনুলিপি স্ট্যাক বিভাগ, হিপ বিভাগ, তথ্য বিভাগ, পরিবেশ পরিবর্তনশীল, পিতামাতার কাছ থেকে কমান্ড লাইন আর্গুমেন্ট।

দেখুন: http://man7.org/linux/man-pages/man2/fork.2.html


0

কাঁটাচামচ () ফাংশন বিদ্যমান প্রক্রিয়া যার থেকে এটা বলা হয় অনুরূপ করে একটি নতুন প্রসেস নির্মাণ করতে ব্যবহার করা হয়। বিদ্যমান ক্রিয়াটি যা থেকে এই ফাংশনটি বলা হয় এটি প্যারেন্ট প্রক্রিয়া হয়ে যায় এবং নতুন তৈরি প্রক্রিয়া শিশু প্রক্রিয়াতে পরিণত হয়। যেমন ইতিমধ্যে বলা হয়েছে যে শিশুটি পিতামাতার একটি সদৃশ অনুলিপি তবে এতে কিছু ব্যতিক্রম রয়েছে।

  • অপারেটিং সিস্টেমে চলমান অন্যান্য প্রক্রিয়ার মতো সন্তানের অনন্য পিআইডি রয়েছে।

  • সন্তানের একটি প্যারেন্ট প্রসেস আইডি রয়েছে যা
    এটি তৈরি করা প্রক্রিয়ার পিআইডি সমান ।

  • রিসোর্স ব্যবহার এবং সিপিইউ টাইম কাউন্টারগুলি শিশু প্রক্রিয়াতে শূন্যে পুনরায় সেট করা হয়েছে।

  • সন্তানের মধ্যে মুলতুবি থাকা সংকেতের সেট খালি।

  • শিশু তার পিতামাতার কাছ থেকে কোনও টাইমার উত্তরাধিকারী হয় না

উদাহরণ:

এখন, যখন উপরের কোডটি সংকলন করে চালানো হবে:

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