এফপি সমর্থকরা দাবি করেছেন যে সম্মতিটি সহজ কারণ তাদের দৃষ্টান্ত পরিবর্তনীয় অবস্থা এড়িয়ে চলে। আমি পাই না।
আমি এই সাধারণ প্রশ্নটি এমন একজন হিসাবে চিহ্নিত করতে চেয়েছিলাম যিনি একজন কার্যনির্বাহী নওফাইটি কিন্তু বছরের পর বছর ধরে আমার পার্শ্বপ্রতিক্রিয়াগুলিতে আমার চোখের পাতায় রয়েছেন এবং সহজতর (বা বিশেষত "নিরাপদ, সহ সকল ধরণের কারণেই এগুলি প্রশমিত করতে চান)" কম ত্রুটি-প্রবণ ") সম্মতি। আমি যখন আমার কার্যনির্বাহী সহকর্মীদের দিকে নজর রাখি এবং তারা কী করছে তখন ঘাসটি কিছুটা সবুজ মনে হয় এবং কমপক্ষে এই বিষয়ে খুব সুন্দর গন্ধ লাগে।
সিরিয়াল অ্যালগরিদম
এটি বলেছিল, আপনার নির্দিষ্ট উদাহরণ সম্পর্কে, যদি আপনার সমস্যাটি প্রকৃতিতে সিরিয়াল হয় এবং A শেষ না হওয়া অবধি B কার্যকর করা যায় না, ধারণাগতভাবে আপনি A এবং B কে সমান্তরালভাবে চালাতে পারবেন না তা যাই হোক না কেন। পুরানো গেমের অবস্থা ব্যবহার করে আপনার সমান্তরাল পদক্ষেপ তৈরির উপর ভিত্তি করে আপনার উত্তরের মতো অর্ডার নির্ভরতা ভাঙার একটি উপায় খুঁজে বের করতে হবে, বা এমন একটি ডেটা স্ট্রাকচার ব্যবহার করুন যা এর উত্তরগুলিতে প্রস্তাবিত হিসাবে অর্ডার নির্ভরতা নির্মূল করতে এর অংশগুলি স্বাধীনভাবে সংশোধন করার অনুমতি দেয় বা এই ধরণের কিছু। তবে নিশ্চিতভাবেই এর মত ধারণাগত নকশার সমস্যার একটি অংশ রয়েছে যেখানে আপনি অগত্যা সহজে এত সহজে সমস্ত কিছুই মাল্টিড্রেড করতে পারবেন না কারণ জিনিসগুলি অপরিবর্তনীয়। কিছুটা কেবল প্রকৃতিতে সিরিয়াল হতে চলেছে যতক্ষণ না আপনি অর্ডার নির্ভরতা ভাঙার কিছু স্মার্ট উপায় খুঁজে পান, এমনকি যদি এটি সম্ভবও হয়।
আরও সহজ সংকেত
তাই বলা হয়, অনেক ক্ষেত্রে যেখানে আমরা প্রোগ্রাম স্থান করে যা সম্ভাব্য উল্লেখযোগ্যভাবে কেবল সম্ভাবনা এটি কারণে কর্মক্ষমতা উন্নত পারে পার্শ্ব প্রতিক্রিয়া জড়িত parallelize করতে ব্যর্থ আছে পারে থ্রেড-নিরাপদ না। পরিবর্তনগুলির স্থিতি (বা আরও বিশেষত, বাহ্যিক পার্শ্ব প্রতিক্রিয়াগুলি) মুছে ফেলার ক্ষেত্রে এমন একটির ক্ষেত্রে অনেকটা সহায়তা করে যা আমি দেখতে পাচ্ছি যে এটি "থ্রেড-নিরাপদ" হতে পারে "স্পষ্টতই থ্রেড-নিরাপদে" রূপান্তরিত করে ।
এই বিবৃতিটিকে আরও কংক্রিট করার জন্য বিবেচনা করুন যে আমি আপনাকে সি তে বাছাইয়ের ফাংশন বাস্তবায়নের জন্য একটি কার্য দেব যা একটি তুলনামূলক গ্রহণ করে এবং সেই উপাদানগুলির একটি অ্যারে বাছাই করতে ব্যবহার করে। এটি বেশ সাধারণীকরণের জন্য বোঝানো হয়েছিল তবে আমি আপনাকে একটি সহজ অনুমান দেব যে এটি এ জাতীয় স্কেলের ইনপুটগুলির বিরুদ্ধে ব্যবহার করা হবে (মিলিয়ন মিলিয়ন বা আরও বেশি) যে এটি নিঃসন্দেহে সর্বদা একটি বহুবিশ্লেষিত বাস্তবায়ন ব্যবহারে উপকারী হবে। আপনি কি আপনার বাছাইয়ের ফাংশনটি মাল্টিথ্রেড করতে পারেন?
সমস্যাটি হ'ল আপনি পারবেন না কারণ তুলনাগুলি আপনার বাছাই ফাংশন কল করতে পারেপার্শ্ব প্রতিক্রিয়া সৃষ্টি করুন যতক্ষণ না আপনি জানেন কীভাবে এগুলি কার্যকর করা হয় (বা খুব স্বল্প নথিভুক্ত) সমস্ত সম্ভাব্য ক্ষেত্রে যা ফাংশনটি অবনমিত না করে অসম্ভব ধরনের। একটি তুলনাকারী অ-পারমাণবিক উপায়ে ভিতরে একটি বৈশ্বিক পরিবর্তনশীল পরিবর্তন করার মতো জঘন্য কিছু করতে পারে। তুলনামূলক 99.9999% এটি নাও করতে পারে তবে আমরা এখনও এই সাধারণীকরণটি কেবলমাত্র 0.00001% ক্ষেত্রে পার্শ্বপ্রতিক্রিয়ার কারণ হতে পারে বলে মাল্টিথ্রেড করতে পারি না। ফলস্বরূপ আপনাকে থ্রেড সুরক্ষার উপর ভিত্তি করে কোনটি ব্যবহার করতে হবে তা স্থির করে প্রোগ্রামারদের এটি ব্যবহার করে একক থ্রেডেড এবং মাল্টিথ্রেডেড বাছাই ফাংশন উভয়ই দিতে হতে পারে। এবং লোকেরা এখনও একক থ্রেডেড সংস্করণ ব্যবহার করতে পারে এবং মাল্টিথ্রিডের সুযোগগুলি মিস করতে পারে কারণ তারা তুলনামূলক থ্রেড-নিরাপদ কিনা তা সম্পর্কেও তারা অনিশ্চিত থাকতে পারে,
অনেকগুলি মস্তিষ্কশক্তি রয়েছে যা সর্বত্র তালা ছুঁড়ে না ফেলে বিষয়গুলির থ্রেড সুরক্ষার বিষয়ে যুক্তিযুক্তকরণের সাথে জড়িত থাকতে পারে যা আমাদের যদি কেবল দৃ guaran় গ্যারান্টি থাকে যে ফাংশনগুলি এখন এবং ভবিষ্যতের জন্য পার্শ্ব প্রতিক্রিয়া সৃষ্টি করবে না। এবং ভয় রয়েছে: ব্যবহারিক ভয়, কারণ যে কাউকে বেশ কয়েকবার দৌড়ের শর্তটি ডিবাগ করতে হয়েছিল সে সম্ভবত ১১০% নিশ্চিত হতে পারে না এমন কোনও বিষয় মাল্টিথ্রেডিং সম্পর্কে দ্বিধা বোধ করবে এবং এটি ততই থাকবে। এমনকি অতি বিড়ম্বনার জন্য (যার মধ্যে আমি সম্ভবত কমপক্ষে সীমান্তরেখা), খাঁটি ফাংশনটি স্বস্তি এবং আত্মবিশ্বাসের অনুভূতি সরবরাহ করে যে আমরা নিরাপদে এটিকে সমান্তরালভাবে বলতে পারি।
এবং এটি এমন একটি প্রধান ক্ষেত্রে যেখানে আমি এটিকে এতটা উপকারী হিসাবে দেখি যদি আপনি কোনও কঠোর গ্যারান্টি পেতে পারেন যে এই ধরনের ফাংশনগুলি থ্রেড-নিরাপদ যা আপনি খাঁটি কার্যকরী ভাষা দিয়ে পান। অন্যটি হ'ল কার্যকরী ভাষাগুলি প্রায়শই প্রথম স্থানে পার্শ্ব প্রতিক্রিয়া মুক্ত ফাংশন তৈরি করতে প্রচার করে। উদাহরণস্বরূপ, তারা আপনাকে ধ্রুবক ডেটা স্ট্রাকচার সরবরাহ করতে পারে যেখানে এটি কোনও বিশাল ডেটা স্ট্রাকচারকে ইনপুট দেওয়ার পক্ষে যথেষ্ট দক্ষ এবং তারপরে একটি সামান্য অংশের সাথে কেবলমাত্র একটি সামান্য অংশের সাথে আসলটি স্পর্শ না করে পরিবর্তিত হয়। এই জাতীয় ডেটা স্ট্রাকচার ব্যতীত যারা কাজ করছেন তারা হয়ত এগুলি সরাসরি সংশোধন করতে পারেন এবং পথে কিছু থ্রেড সুরক্ষা হারাতে পারেন।
ক্ষতিকর দিক
এটি বলেছিল, আমি আমার কার্যনির্বাহী বন্ধুবান্ধব (যাকে আমি অত্যন্ত শান্ত বলে মনে করি) এর প্রতি সমস্ত শ্রদ্ধার সাথে এক অংশের সাথে একমত নই:
[...] কারণ তাদের দৃষ্টান্ত পরিবর্তনীয় অবস্থা এড়িয়ে চলে।
এটি অগত্যা অপরিবর্তনীয়তা নয় যা সামঞ্জস্যকে এতটা ব্যবহারিক করে তোলে যা আমি দেখি। এটি এমন ফাংশন যা পার্শ্ব প্রতিক্রিয়া সৃষ্টি করে avoid কোনও ফাংশন যদি সাজানোর জন্য একটি অ্যারের ইনপুট করে, এটি অনুলিপি করে, এবং তারপরে অনুলিপিগুলিকে সারণী পরিবর্তন করতে এবং অনুলিপি করে দেয়, তবে এখনও একই থ্রেড-নিরাপদ কিছু অপরিবর্তনযোগ্য অ্যারে টাইপের সাথে কাজ করার মতোই আপনি একই ইনপুটটি পার করছেন একাধিক থ্রেড থেকে এটি অ্যারে। সুতরাং আমি মনে করি এখনও খুব একযোগে-বান্ধব কোড তৈরির ক্ষেত্রে পরিবর্তনীয় প্রকারের একটি জায়গা আছে, তাই বলার জন্য, যদিও অবিচ্ছিন্ন প্রকারের অনেকগুলি অতিরিক্ত সুবিধা রয়েছে, যার মধ্যে আমি অবিচ্ছিন্ন বৈশিষ্ট্যগুলির জন্য এতটুকু ব্যবহার করি না তবে পার্শ্ব প্রতিক্রিয়া মুক্ত ফাংশন তৈরি করতে সমস্ত কিছু অনুলিপি করার ব্যয়কে হ্রাস করুন।
এবং প্রায়শই অতিরিক্ত অতিরিক্ত ডেটা বদলানো এবং অনুলিপি আকারে পার্শ্ব প্রতিক্রিয়া মুক্ত ফাংশনগুলি তৈরি করার ক্ষেত্রে ওভারহেড থাকে, সম্ভবত একটি অতিরিক্ত স্তরের ইন্ডিরিশন এবং সম্ভবত একটি ধ্রুবক ডেটা কাঠামোর অংশে কিছু জিসি থাকে তবে আমি আমার এক বন্ধুকে দেখি যার আছে একটি 32-কোর মেশিন এবং আমি ভাবছি বিনিময়টি সম্ভবত এটি মূল্যবান যদি আমরা আরও আত্মবিশ্বাসের সাথে সমান্তরালে আরও কিছু করতে পারি।