ভাগ করে নেওয়া রাষ্ট্র কেন কর্মক্ষমতা হ্রাস করে?


19

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

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

প্রশ্নটি ... যেহেতু কোনও তালা নেই কেন এই সিঙ্গলটনের ভূমিকা একটি পারফরম্যান্স হিট তৈরি করে? কভারগুলির নীচে ঠিক কী চলছে যা এটি ব্যাখ্যা করতে পারে?

নিশ্চিত করার জন্য, এই নতুন সিঙ্গেলটন অ্যাক্সেস করা একমাত্র পরিবর্তন এবং আমি ক্যাশে কল আউট মন্তব্য করে বিশ্বাসযোগ্যভাবে এটিকে পুনরায় তৈরি করতে পারি।


8
আপনি কোডে কোনও প্রোফাইলারকে নির্দেশ করেছেন?
টিমো জিউশ

2
আপনি সিএলআর এবং সম্ভবত উইন্ডোজ কার্নেল (গড় প্রোগ্রামারটির পক্ষে সহজ কাজ নয়) হিসাবে প্রোফাইলিং করা না হলে প্রোফাইলিং এই প্রশ্নের উত্তর দেবে না।
ইগবি লার্জম্যান

1
@ জোজিকি অলরেডি তখন আমি অনুমান করি যে এখানে আমার জন্য একমাত্র কাজটি করা +1 এবং পছন্দসই! এগুলি অদ্ভুত বলে মনে হচ্ছে যেহেতু তারা উভয়ই একই সময়ে একই সাথে একই সাথে ইন্ডিরিয়ারেশন পর্যায়ে রয়েছে এবং প্রসেসরের ক্যাশে থাকা উচিত, ইত্যাদি ...
সর্বোচ্চ

2
FWIT আমি কয়েকটি থ্রেড তৈরি করেছি এবং কিছু টাইমার দৌড়েছি। আমি একটি ক্লাস, সিঙ্গেলটন, লকডসিংটন এবং ডিক <স্ট্রিং, স্ট্রিং> ইনস্ট্যান্ট করেছি। প্রতিটির প্রথম তাত্ক্ষণিকতার পরে, ক্রমাগত রানগুলি কোনও প্রদত্ত বস্তুর জন্য প্রায় 2000ns সময় নিয়েছিল। অভিধানটি 2x ধীর গতিতে চলেছে, এটি কনস্ট্রাক্টর কোডের কারণে হতে পারে ... এটি নিজে লক হওয়ার চেয়ে ধীর। সমস্ত জিসি, থ্রেড কিউ এবং অন্যান্য ওভারহেডের ওএস হ্যান্ডলিং বিবেচনা করে ... নিশ্চিত কেউ নিশ্চিত না যে এই প্রশ্নের উত্তর দিতে পারে। তবে, আমার ফলাফলগুলি থেকে আমি বিশ্বাস করি না যে বিষয়টি সিঙ্গলটনের সাথে আছে। যদি এটি এমএসডিএন-এর মতো বাস্তবায়িত হয় তবে এক্সপ্লোরার সংকলক অপ্টিমাইজেশন অন্তর্ভুক্ত।
পি.ব্রেইন.ম্যাকি

1
@ জোজিকি - আরেকটি চিন্তাভাবনা: ক্যাশে ব্যবহার করা কি এক স্তরকে উদ্বুদ্ধ করে? যদি প্রায়শই অ্যাক্সেস করা হয় তবে অতিরিক্ত পয়েন্টার ডেরিফ (বা এমএসআইএল সমতুল্য) তাড়া করে স্থানীয় কম-পরোক্ষ অনুলিপিটির জন্য কিছুটা সময় যোগ করতে পারে।
এসডিজি

উত্তর:


8

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


3
এটি false sharingআপনার বর্ণনার মতো দৃশ্যের মতো শোনাচ্ছে । এটিকে বিচ্ছিন্ন করতে আমার L2 ক্যাশে প্রোফাইল করা দরকার। দুর্ভাগ্যক্রমে, এগুলি রেফারেন্সের ধরণ তাই বাফার স্পেস যুক্ত করা কোনও বিকল্প হবে না যদি এটি আসলে যা ঘটে থাকে।
জোজিকি

3

আমি নিশ্চিত করবো যে অভিধানের কী হিসাবে আপনি যে অবজেক্টগুলি ব্যবহার করেন তার পদ্ধতি Equals()এবং GetHashCode()পদ্ধতিগুলির কোনও অপ্রত্যাশিত অ-থ্রেডিং-বান্ধব পার্শ্ব প্রতিক্রিয়া না ঘটে। প্রোফাইলিং এখানে ব্যাপকভাবে সহায়তা করবে।

যদি কোনও সুযোগে আপনার কীগুলি স্ট্রিং হয় তবে সম্ভবত এটি আপনার কাছে রয়েছে: গুজবটি রয়েছে যে স্ট্রিংগুলি অপরিবর্তনীয় বস্তুর মতো আচরণ করে তবে নির্দিষ্ট অনুকূলিতকরণের জন্য এগুলি অভ্যন্তরীণভাবে একটি পরিবর্তনীয় ফ্যাশনে প্রয়োগ করা হয়, যা মাল্টিথ্রেডিংয়ের ক্ষেত্রে এটি অন্তর্ভুক্ত রয়েছে everything ।

আমি অভিধানটি থ্রেডগুলিতে প্রবাহিত করার চেষ্টা করব যা সিঙ্গলটনের পরিবর্তে এটি নিয়মিত রেফারেন্স হিসাবে ব্যবহার করে সমস্যাটি ভাগ করে নেওয়ার ক্ষেত্রে রয়েছে বা অভিধানের এককতার সাথে রয়েছে কিনা তা দেখার জন্য। (সম্ভাব্য কারণগুলি নির্মূল করা))

আমি ConcurrentDictionaryনিয়মিত পরিবর্তে এর পরিবর্তে চেষ্টা করবো Dictionaryযদি এর ব্যবহারে কিছু আশ্চর্যজনক ফলাফল আসে। ConcurrentDictionaryআপনার নিয়মিত তুলনায় যদি আরও ভাল বা আরও খারাপ কাজ সম্পাদন করতে দেখা যায় তবে সমস্যাটি সম্পর্কে অনেকগুলি অনুমান করা যায় Dictionary

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

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