আমি কেন অনুশীলনে একে অপরকে পছন্দ করব? std::threadএকটি শ্রেণি ছাড়া প্রযুক্তিগত পার্থক্য কী ?
std::threadকরে
std::threadবা pthreadsনা।
আমি কেন অনুশীলনে একে অপরকে পছন্দ করব? std::threadএকটি শ্রেণি ছাড়া প্রযুক্তিগত পার্থক্য কী ?
std::threadকরে
std::threadবা pthreadsনা।
উত্তর:
আপনি যদি অনেক প্ল্যাটফর্মে কোড চালাতে চান তবে পিক্সিক থ্রেডের জন্য যান। এগুলি প্রায় সর্বত্র পাওয়া যায় এবং বেশ পরিপক্ক হয়। অন্যদিকে আপনি যদি কেবল লিনাক্স / জিসিসি ব্যবহার করেন তবে std::threadএটি পুরোপুরি ঠিক আছে - এটির উচ্চতর বিমূর্ততা স্তর রয়েছে, সত্যই একটি ভাল ইন্টারফেস এবং অন্যান্য সি ++ 11 ক্লাসের সাথে দুর্দান্ত খেলে।
সি ++ 11 std::threadশ্রেণি দুর্ভাগ্যক্রমে প্রতিটি প্ল্যাটফর্মে নির্ভরযোগ্যভাবে (এখনও) কাজ করে না, এমনকি সি ++ 11 উপলব্ধ মনে হলেও। উদাহরণস্বরূপ নেটিভ অ্যান্ড্রয়েড std::threadবা উইন 64 এ এটি ঠিক কাজ করে না বা মারাত্মক পারফরম্যান্সের বাধা (2012 হিসাবে) রয়েছে।
একটি ভাল প্রতিস্থাপন হ'ল boost::thread- এটি একেবারে অনুরূপ std::thread(আসলে এটি একই লেখকের কাছ থেকে) এবং নির্ভরযোগ্যভাবে কাজ করে তবে অবশ্যই এটি তৃতীয় পক্ষের লাইব্রেরি থেকে আরেকটি নির্ভরতা প্রবর্তন করে।
সম্পাদনা করুন: ২০১ of সালের হিসাবে, std::threadবেশিরভাগ নেটিভ অ্যান্ড্রয়েডে কাজ করে। কিছু ক্লাস, যেমন std::timed_mutexএখনও প্রয়োগ করা হয় না।
std::threadএবং এর রাই-স্টাইলটি ভাল কারণ এটি সি ++ ব্যতিক্রমগুলি পরিচালনা করতে পারে যখন পাইথ্রেডগুলি বাক্সের বাইরে থাকতে পারে না।
দ্য std::threadগ্রন্থাগার একটি পরিবেশ সমর্থনকারী pthreads মধ্যে pthreads উপরে বাস্তবায়িত হয় (উদাহরণস্বরূপ: libstdc ++) সাথে।
আমি মনে করি উভয়ের মধ্যে বড় পার্থক্য বিমূর্ততা। std::threadএকটি সি ++ শ্রেণীর পাঠাগার। std::threadবিশ্লেষণ করা কেশ, রিকার্সিভ mutexes, ভবিষ্যতে / প্রতিশ্রুতি নকশা প্যাটার্ন বাস্তবায়নের, এবং আরও: লাইব্রেরি অনেক বিমূর্ত বৈশিষ্ট্য, উদাহরণস্বরূপ অন্তর্ভুক্ত করা হয়েছে।
+1আমার কাছ থেকে সবচেয়ে গুরুত্বপূর্ণ বিষয়টি নির্দেশ করার জন্য, যথা std :: থ্রেড একটি উচ্চ স্তরের বিমূর্ততা সরবরাহ করে।
std::thread উইন্ডোজ, ম্যাকস এবং লিনাক্সের মতো বিভিন্ন প্ল্যাটফর্ম জুড়ে বহনযোগ্যতা সরবরাহ করে।
নীচের মন্তব্যগুলিতে এবং সম্পর্কিত উত্তর https://stackoverflow.com/a/13135425/1158895std::thread তে @hirshhornsalz দ্বারা উল্লিখিত হিসাবে , এখনও সমস্ত প্ল্যাটফর্মে সম্পূর্ণ নাও হতে পারে। এমনকি এখনও, (এটি অদূর ভবিষ্যতে হবে) এটির পক্ষে pthreadহওয়া উচিত কারণ এটি আপনার অ্যাপ্লিকেশনটিকে আরও ভবিষ্যত-প্রমাণ করে তোলে।
boost::threadউইন 64 বা বায়োনিক (অ্যান্ড্রয়েড) ব্যবহার করতে হবে , কারণ std::threadএখনও বড় অংশের অভাব রয়েছে, যেখানে লিনাক্সে std::threadযথেষ্ট পরিপক্ক বলে মনে হচ্ছে।
আমার পক্ষে সিদ্ধান্ত নেওয়া প্রযুক্তিগত পার্থক্য হ'ল স্ট্র্যাডের বিপরীতে স্ট্যান্ডার্ডে সিগন্যাল হ্যান্ডলিং আদিমদের অনুপস্থিতি। একা একা স্ট্যান্ড ব্যবহার করে ইউনিক্স প্রসেসে সিগন্যাল হ্যান্ডলিংকে সঠিকভাবে নির্দেশ করতে অক্ষমতা হ'ল স্টাড :: থ্রেডের ব্যবহারে দুর্বল ত্রুটি এএফআইকে এটি একটি উত্সর্গীকৃত সমস্ত সংকেতকে প্রক্রিয়াজাত করতে বোনা ফাইড মাল্টি-থ্রেড সিগন্যাল হ্যান্ডলিং প্যাটার্ন স্থাপন থেকে বিরত রাখে one থ্রেড করুন এবং বাকীগুলিতে তাদের ব্লক করুন। আপনাকে স্টাড :: থ্রেডটি pthreads ব্যবহার করে প্রয়োগ করা হবে এবং pthread_sigmask ব্যবহার করার সময় সেরাের জন্য আশা করা বাধ্য করা হবে। সংস্থাগুলি সঠিকভাবে পরিচালনা করা এন্টারপ্রাইজের জন্য ইউনিক্স সিস্টেম প্রোগ্রামিংয়ে অ-আলোচনাযোগ্য।
২০১ at সালের হিসাবে, স্টাড :: থ্রেড একটি খেলনা; যে হিসাবে সহজ।
std::threadপ্রকারে সুরক্ষা এনে দেয় যা প্রাইথ্রেডের নেই।
ওপেনএমপি
এটি একটি স্ট্যান্ডার্ডাইজড, এসএমপি ভিত্তিক মাল্টিথ্রেডিং স্ট্যান্ডার্ড যা ইতিমধ্যে এক দশক ধরে লিনাক্স এবং উইন্ডোজে কাজ করছে। ওপেনএমপি জিসিসি এবং মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও সহ সমস্ত সংকলকগুলির সাথে ডিফল্টরূপে উপলব্ধ।
ওপেনএমপি ব্যবহার করার সময় একটি বিষয় লক্ষ্য রাখতে হবে, সিপিইউ-কোরের তুলনায় যদি আরও থ্রেড থাকে তবে প্রাসঙ্গিক পরিবর্তন ওভারহেডের প্রসঙ্গে সুইচিংয়ের কারণে কর্মক্ষমতা হ্রাস পাবে। দ্বিতীয় জিনিসটি মনে রাখবেন যে একটি বাস্তব, অপারেটিং সিস্টেমের স্তর, থ্রেডের তুলনা তুলনামূলকভাবে ব্যয়বহুল। প্রারম্ভিককরণটি একটি সেকেন্ডের ভগ্নাংশ, তবে কিছু অ্যাপ্লিকেশনগুলিতে খুব সামান্য ভগ্নাংশই যথেষ্ট ব্যয় করে।
সম্পর্কিত সফ্টওয়্যার আর্কিটেকচার প্রয়োজনীয়তার জন্য আপনি ওপেনএমপি ব্যবহারের স্থলে "লাইটওয়েট থ্রেড" বা "সবুজ থ্রেড" এর কিছু বাস্তবায়ন সন্ধান করতে চাইতে পারেন। পার্থক্যটি হ'ল ওপেনএমপি থ্রেডগুলি আসল, অপারেটিং সিস্টেমের স্তর, থ্রেডগুলি তবে "সবুজ থ্রেড" কেবল "সিমুলেটেড থ্রেড" হতে পারে যা কিছু সংখ্যক বাস্তব সংখ্যক থ্রেড ব্যবহার করে সম্পাদিত হয়।
std::async