এমন কোন ভ্রান্ত ধারণা রয়েছে যা লোককে থ্রেড ব্যবহার বন্ধ করে দেয়? [বন্ধ]


12

একটি প্রোগ্রামে থ্রেডিং বাস্তবায়ন করা শক্ত, হ্যাঁ, তবে কেন এটি কিছু কারণেই এর সুস্পষ্ট প্রয়োজন থাকা সত্ত্বেও কিছু লোক সেগুলি প্রয়োগ করে না।

একটি উদাহরণ: প্রোগ্রামটিকে একটি ডাটাবেস থেকে একটি ডেটাসেট লোড করতে হবে, করণীয়টি হ'ল সংযোগটি তৈরি করা এবং কোনও কর্মী থ্রেডে ডাটাবেস থেকে ডেটা পাওয়া এবং তারপরে এটি জিইউআইতে লোড করা, জিইউআই থ্রেডকে ব্যবহারকারীর জন্য প্রতিক্রিয়াশীল রেখে দেয় ।

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

হার্ডওয়্যারটি মাল্টি-কোরে যাওয়ার সাথে সাথে আমি মনে করি আমাদের থ্রেডগুলি আরও ভালভাবে বোঝা উচিত এবং সেগুলি ব্যবহার করতে ভয় পাবেন না। আমি এটি ব্যক্তিগতভাবে আকর্ষণীয় বিষয় মনে করি।

তাহলে থ্রেডিংয়ের বিষয়ে আপনি কী শুনেছেন যা মিথ্যা?


Misfits এবং underachievers থ্রেড পরিচালনা করতে পারবেন না। আসল প্রশ্নটি: আপনি সে সম্পর্কে কী করতে যাচ্ছেন?
চাকরি

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

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

উত্তর:


19

থ্রেডিং শক্ত

অবশ্যই। এটা হতে পারে. যাইহোক, লোকেরা তাদের মাথায় এই ধারণা পেয়ে যায় যে এটি এতই কঠিন, যে তারা এটিকে বোঝার চেষ্টা করে না।

এটি অসম্ভব বলে মনে হয় না।


2
আমি এই উত্তর সমর্থন করি। লোকেরা মনে করে এটি কঠিন। আপনি যখন বুঝতে চেষ্টা করার জন্য যথেষ্ট সময় ব্যয় করেন তবে তা নয়।

11
@Pierre, আমি হার্ড পিপলস সংজ্ঞার যে প্রচুর আশা হয় "আপনি বোঝার চেষ্টা যথেষ্ট সময় কাটাতে হবে।"
বেনজল

1
টিপিএল এবং await/ asyncকীওয়ার্ডগুলির সাহায্যে থ্রেডিং অনেক সহজ হয়ে উঠছে :)
রাচেল

@ পিয়ার 303: আপনি যখন বুঝতে যথেষ্ট পর্যাপ্ত সময় ব্যয় করেন এটি এখনও শক্ত , এবং প্রকৃতপক্ষে যে লোকেরা এটি সর্বোত্তমভাবে বোঝে তারা যতটা সম্ভব এড়াতে পারে।
মাইকেল বর্গওয়ার্ট

9

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

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


স্বরে নোট করুন: সমান্তরাল অ্যালগরিদম লিখুন ... ধন্যবাদ।
Droogans

বার্তার সারি (এমএফসি হিসাবে একই)। তবে প্রোগ্রামাররা বার্তাবাহকের সারিতে নাশকতা না পাওয়া (মেমরিতে সরাসরি ডেটা শেয়ার করে) এমনকি এটি একটি অগ্নিকাণ্ডযোগ্য অপরাধ হলেও মনে হয় ব্যর্থ হয়েছে।
rwong

3

থ্রেডিং আপনার সমস্ত সমস্যার সমাধান করে

আপনার যদি পারফরম্যান্সের সমস্যা হয় তবে আপনার থ্রেডিংয়ের ডানদিকে লাফানো উচিত নয়

থ্রেডগুলি হালকা ওজনের হয়

দশ এবং দশকের দশকে থ্রেডগুলি হালকা ওজনের। কয়েক হাজার থ্রেড ছড়িয়ে দেওয়া তা নয়।

থ্রেডিং সহজ [জাভা]

থ্রেড তৈরি করা সহজ, এর অর্থ এই নয় যে আপনি এটি থেকে উপকৃত হবেন।


কেবল রেকর্ডের জন্য, ম্যাক ওএস আপনাকে (ডিফল্ট ইনস্টল করার সময়) 512 টির বেশি থ্রেড তৈরি করতে দেবে না।
zneak

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

4
@ জার্গ ডব্লু মিটাগ: আপনার মন্তব্য শুনে আমি বিভ্রান্ত ওএস একটি থ্রেড বা প্রক্রিয়া তৈরি করে কীভাবে এরলং পরিবর্তন হয়?
স্টিভেন ইভার্স

1
@ স্নোআরফাস: এরলং ওএস থ্রেড ব্যবহার করে না। এখনই তিনটি প্রধান এরলং বাস্তবায়ন রয়েছে: বিম, হাইপাই এবং এরজং। বিম এবং হাইপাই হ'ল দেশীয় বাস্তবায়ন (এটি এমনকি কোনও ওএস ছাড়াই চলতে পারে) এবং তাদের নিজস্ব প্রক্রিয়াগুলি প্রয়োগ করে। এরজং জেভিএম-এ চলে এবং চমত্কারভাবে উজ্জ্বল কিলিম লাইব্রেরি ব্যবহার করে প্রক্রিয়াগুলি প্রয়োগ করে।
Jörg ডব্লু মিট্টাগ

@ Jörg ডব্লিউ Mittag: আমার প্রশ্ন বিবেচনা programmers.stackexchange.com/questions/28453/... , আমি এই খুব আকর্ষণীয়। ধন্যবাদ.
স্টিভেন এভার্স

1

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

আপনার বাগের মুখোমুখি হওয়ার সম্ভাবনা অনেক বেশি যা আপনি থ্রেড ব্যবহার করেন যদি তখন আপনি ঠিক করেন না তবে আপনি ঠিক করতে সক্ষম হবেন না।


অদম্য বাগ? এর আগে আমি তাদের কোনও দেখিনি ..
adamk

আপনি যে বাগটি ঠিক করতে পারেন নি সত্যিই কখনও দেখেনি? সময় এবং বেতনের জন্য যে উপলব্ধ ছিল?
কামিল জাজোট

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

1

থ্রেডগুলি ব্যবহার করা কেন শক্ত তা সংক্ষেপে: -
সত্য জিনিসগুলি 1) কী লক করতে হবে এবং কখন লক করতে হবে সে সম্পর্কে সুসংগতকরণ এবং যত্নের সাথে নকশার সিদ্ধান্ত প্রয়োজন
)) রান টাইম প্রবাহের উপর কোন নিয়ন্ত্রণ নেই
3) ডিফল্ট ডিবাগিং
4) (খুব অল্প কিছু) সময়) প্ল্যাটফর্মের সামঞ্জস্যতা: - এটি যত্ন নিতে গ্রন্থাগারগুলি উপস্থিত রয়েছে

মিথ্যা জিনিস: -
1) থ্রেড-সেফ এবং পুনরায় প্রবেশকারী ফাংশনগুলির বিভ্রান্তিমূলক ধারণা
2) থ্রেডগুলি কাগজে ভাল দেখায় তবে কার্যকর করা খুব কঠিন


এগুলি কি সত্য বা অসত্য বলে মনে করা হচ্ছে? ওপি কোন জিনিসগুলি সত্য নয় সে সম্পর্কে জিজ্ঞাসা করেছিল এবং বহু-থ্রেড প্রোগ্রামিং থেকে মানুষকে ভয় দেখায়।
স্টিভেন এভার্স

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

1

আপনি যদি নিজের কোডের জন্য পরীক্ষা লিখতে না চান তবে থ্রেড ব্যবহার করবেন না।

থ্রেডগুলি সাধারণ 'অনুলিপি এবং পেস্ট' প্রোগ্রামারের জন্য নয় যারা ওএস এবং কম্পিউটার আর্কিটেকচারের অন্তর্নিহিত মৌলিক বিষয়গুলি বোঝেন না। যেহেতু 90% প্রোগ্রামার কেবল জাভার সাথে পরিচিত, তাই প্রকৃতপক্ষে এই লোকগুলি থ্রেড ব্যবহার করা উচিত নয়। জাভা থ্রেডগুলিকে "সহজ" করে তোলে তবে আমি প্রচুর প্রোগ্রামারকে দেখেছি যারা কেবলমাত্র মনে করে যে তারা যদি সিঙ্ক্রোনাইজড কাঠামোগত ব্যবহার করে তবে তাদের কোড থ্রেডগুলিতে কাজ করবে .... আহ না no

বলা হচ্ছে, প্রত্যেককে কোথাও শুরু করা দরকার, কেবল আপনার সংস্থাগুলির প্রযোজনা ব্যাকএন্ড সার্ভারকে আপগ্রেড করার জন্য আপনার প্রথম থ্রেডিং প্রকল্পটি তৈরি করবেন না।


সঠিকভাবে থ্রেডগুলি কীভাবে করা যায় সে সম্পর্কে আপনি কি কিছু সংস্থার প্রস্তাব দিতে পারেন?
জোনাথন

আমি নিশ্চিত যে এটি সুরাহা হয়েছে। এখানে শুরুর চেষ্টা stackoverflow.com/questions/660621/threading-best-practices
cmcginty

এটির সাথে সমস্যাটি হ'ল যদি আপনার 100% পরীক্ষার কভারেজ থাকে তবে আপনার পরীক্ষাগুলি কীভাবে ভাগ করা সংস্থানসমূহের সাথে নির্দেশাবলীকে ইন্টারলিভ করে তা দিয়ে সম্ভাব্য সমস্ত বিষয় কভার করবে কিনা তা জানার কোনও উপায় থাকবে না। অন্যদিকে কোনও ভাগ করে নেওয়া আর্কিটেকচার সহ এটি অনেক সহজ হয়ে যায়।
জাচারি কে

1

একটি উদাহরণ: প্রোগ্রামটিকে একটি ডাটাবেস থেকে একটি ডেটাসেট লোড করতে হবে, করণীয়টি হ'ল সংযোগটি তৈরি করা এবং কোনও কর্মী থ্রেডে ডাটাবেস থেকে ডেটা পাওয়া এবং তারপরে এটি জিইউআইতে লোড করা, জিইউআই থ্রেডকে ব্যবহারকারীর জন্য প্রতিক্রিয়াশীল রেখে দেয় ।

আমি দেখতে পাচ্ছি না যে এই পরিস্থিতি কমপক্ষে 4 কারণে থ্রেডিং ব্যবহার করার প্রয়োজনীয়তার প্রতিনিধিত্ব করে:

  1. ডেটা পুনরুদ্ধার খুব দ্রুত হওয়া উচিত।

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

  3. ওয়েব ভিত্তিক ইন্টারফেসগুলিতে, থ্রেডিং মডেল সম্পর্কিত লিঙ্কগুলি সক্রিয় করা যেতে পারে।

  4. থ্রেডিং জটিলতার সাথে যুক্ত হিসাবে আপনি স্বীকার করবেন, কিছু বিকাশকারী বিকাশকারী বৈশিষ্ট্যগুলি যুক্ত করতে বা জটিল কোডটি ডিবাগ করতে সক্ষম নাও হতে পারে।

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


1
আপনার প্রথম পয়েন্টটি বিতরণকৃত কম্পিউটিংয়ের ভুলগুলির কথা মনে করিয়ে দেয় ( en.wikedia.org/wiki/Fallacies_of_Distributes_Computing )। কোনও প্রতিক্রিয়াশীল ইন্টারফেসের জন্য যখন আপনার পয়েন্ট 2 থেকে 1 বা 2 সেকেন্ডের বেশি অপেক্ষা করতে হবে তখন প্রচুর ব্যবহারকারীরা খুব সহজেই আশেপাশে ক্লিক করতে শুরু করতে পারে এবং পরিস্থিতি আরও খারাপ করে তোলে।
সুরক্ষিত করুন

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

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

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

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