আমি কীভাবে বলতে পারি যে আমি মাল্টি-থ্রেডিং অতিরিক্ত ব্যবহার করছি?


15

আমার মনে হচ্ছে আমি বহু-থ্রেডিং অতিরিক্ত ব্যবহার করছি over

আমার কাছে এ, বি এবং সি জাতীয় 3 ধরণের ডেটা রয়েছে

প্রত্যেকটি Aএকাধিক এসে রূপান্তরিত হতে পারে Bএবং প্রতিটি Bএকাধিক এসে রূপান্তরিত হতে পারে C

আমি শুধুমাত্র এর চিকিত্সা করতে আগ্রহী C

আমি বেশ কয়েকটি রূপান্তর ফাংশন দিয়ে এটি মোটামুটি সহজে লিখতে পারি। কিন্তু আমি নিজেকে, থ্রেড সঙ্গে এটি বাস্তবায়নের তিন সারি (ধরা queue_a, queue_bএবং queue_c)। দুটি রূপান্তর বিভিন্ন ধরণের রূপান্তর করছে এবং একজন কর্মী:

  • ConverterAথেকে পড়ে queue_aএবং লিখতেqueue_b
  • ConverterBথেকে পড়ে queue_bএবং লিখতেqueue_c
  • Worker থেকে প্রতিটি উপাদান পরিচালনা করে queue_c

রূপান্তরগুলি মোটামুটি সাংগঠনিক, এবং আমি জানি না যে এই মডেলটি খুব সংশ্লেষিত কিনা। তবে এটি আমার কাছে অত্যন্ত শক্তিশালী বলে মনে হচ্ছে। প্রতিটি "রূপান্তরকারী" কাতারে ডেটা আসার আগেই কাজ শুরু করতে পারে এবং কোডের যে কোনও সময় আমি কেবলমাত্র নতুন Aএস বা Bএস "সাবমিট" করতে পারি এবং এটি রূপান্তর পাইপলাইনটিকে ট্রিগার করবে যা কর্মী দ্বারা একটি কাজকে ট্রিগার করবে turn থ্রেড।

এমনকি ফলাফল কোড সহজ দেখাচ্ছে। তবে আমি এখনও অনিশ্চিত হয়েছি যদি আমি সাধারণ কিছু জন্য থ্রেডগুলি আপত্তি করি।


5
আমি মনে করি তাড়া করার জন্য এই প্রশ্নটি কিছুটা ছোট করা দরকার। শিরোনামটিও বিভ্রান্তিমূলক - মনে হচ্ছে আপনি কোনও রেন্ট চালু করতে চলেছেন (যদিও আপনি নন)। হতে পারে আপনার কাছাকাছি কিছু জিজ্ঞাসা করা উচিত "আমি মাল্টিথ্রেডিং অতিরিক্ত ব্যবহার করছি কিনা তা আমি কীভাবে বলতে পারি?"
কেচালাক্স

পছন্দ করেছেন আমি এটি সম্পাদনা করেছি এবং আশা করি এটি আমার চিন্তাভাবনাগুলি আরও ভালভাবে ধারণ করে।
exhuma

4
@Exhuma অসাধারণ। আপনার -1 একটি +1 হয়ে যায়
কেচালাক্স

3
@ কেচালাক্স ... লুতে আসা আপনার মতামতকে তাত্পর্যপূর্ণ করে তুলতে পারে ... :)
এক্সুমা

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

উত্তর:


17

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

আপনি যদি এগুলি ব্যবহার করতে আরও স্বাচ্ছন্দ্য বোধ করেন তবে আপনার কাছে আরও শক্তি। তবে, জেনে রাখুন যে থ্রেডগুলি যদি বাধা বিপত্তিগুলি দূর করে গতি বাড়িয়ে না দেয় তবে তারা অবশ্যই আপনার প্রোগ্রামটি কমিয়ে দিচ্ছে।

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

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

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

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


আপনি আকর্ষণীয় পয়েন্ট করা হয়। আমার ক্ষেত্রে, রূপান্তর পাইপলাইন এটি কার্য সম্পাদন সম্পর্কিত নয়। এটি কোড সরলতা / পঠনযোগ্যতা সম্পর্কে। কর্মী থ্রেড হয় কর্মক্ষমতা সম্পর্কে। প্রতিটি চূড়ান্ত টাস্ক একটি রিমোট মেশিনে চলে এবং একাধিক কাজ জমা দেওয়ার ফলে তা দ্রুত গতিতে চলে।
exhuma

2
@ ইজহুমা একাধিক থ্রেডের মাধ্যমে সমান্তরাল সম্পাদনের পাশাপাশি আপনি ফিউচার / প্রতিশ্রুতি বা কলব্যাক-ওরিয়েন্টেড স্টাইলের মতো অ্যাসিঙ্ক কৌশলগুলিও ব্যবহার করতে পারেন। নোট করুন যে আপনি পুনরাবৃত্তকারী / স্ট্রিমগুলি বন্ধ করে পাইপলাইনগুলি মডেল করতে পারেন; আসলে থ্রেড ব্যবহার করার জন্য কোন প্রয়োজন নেই - আপনি বহু সিপিইউ ব্যবহার করতে চান ব্যতীত (নেটওয়ার্কিং কোড, এই প্রায় না কেনার ক্ষেত্রে দেখা যায়)
আমন

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

ওটি: আমি আপনার অবতারকে ভালবাসি। আমাকে হাসাল.
মার্জন ভেনেমা

@ ইজহুমা, আমি এই উত্তরের সাথে একমত, তবে আমি এটি যুক্ত করব যে আপনি যদি কোডের সরলতার জন্য থ্রেড ব্যবহার করতে চলেছেন তবে এটি দুর্দান্ত, তবে আপনি যত্নবান হন যে আপনি থ্রেড-সুরক্ষা এবং একাধিক থ্রেড সহ সম্ভাব্য গোটাচা বুঝতে পারেন। মাল্টিথ্রেডেড কোডের একটি সাধারণ টুকরোটির মতো যা মনে হতে পারে তাতে সহজেই গোপনীয় রেস শর্ত থাকতে পারে যা খুব হার্ড-থেকে-ট্র্যাক-ডাউন বাগগুলির ভাণ্ডার হতে পারে।
বেন লি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.