সংহত: আপনি কীভাবে নকশার কাছে যান এবং বাস্তবায়নটি ডিবাগ করেন?


37

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

তবে, আমি দেখতে পেয়েছি যে আপনি কী করতে চান তা কল্পনা করতে সহায়তা করার জন্য খুব কম সরঞ্জাম রয়েছে এবং আপনি কমপক্ষে আপনার মূল দৃষ্টির নিকটে রয়েছেন কিনা তা যাচাই করে নিন। সমঝোতার কোডগুলি ডিবাগ করা এমন ভাষাগুলির সাথে দুঃস্বপ্ন হতে পারে যা চুক্তির জন্য ডিজাইন করা হয়নি (যেমন সি / সি ++, সি #, জাভা ইত্যাদি)। বিশেষত, আপনার বিকাশের পরিবেশে একটি সিস্টেমে সহজেই ঘটে এমন পরিস্থিতি পুনরায় তৈরি করা অসম্ভব হয়ে উঠতে পারে।

সুতরাং, সমঝোতা এবং সমান্তরাল প্রক্রিয়াকরণের সাথে মোকাবিলা করার জন্য একটি সিস্টেম ডিজাইনের বিষয়ে আপনার দৃষ্টিভঙ্গি কী কী? উদাহরণ:

  • কীভাবে অনুমান করা যায় যে কী একযোগে বনাম তৈরি করা যেতে পারে what
  • আপনি কীভাবে ত্রুটির পরিস্থিতি পুনরুত্পাদন করবেন এবং অ্যাপ্লিকেশনটি কার্যকর হওয়ার সাথে সাথে কী ঘটছে তা দেখুন?
  • আপনি অ্যাপ্লিকেশনের বিভিন্ন সমবর্তী অংশগুলির মধ্যে মিথস্ক্রিয়াটিকে কীভাবে কল্পনা করতে পারেন?

এর কয়েকটিটির জন্য আমার নিজের উত্তর রয়েছে তবে আমি আরও কিছুটা শিখতে চাই।

সম্পাদন করা

এখন পর্যন্ত আমাদের অনেক ভাল ইনপুট রয়েছে। লিঙ্কযুক্ত নিবন্ধগুলির অনেকগুলি খুব ভাল এবং আমি ইতিমধ্যে সেগুলির কয়েকটি পড়েছি।

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

অনুগ্রহের জন্য লক্ষ্য

আমার কি করা উচিত তা বলবেন না। আমি ইতিমধ্যে এটি নিয়ন্ত্রণে আছে। তুমি কি কর আমাকে বল। আপনি কীভাবে এই সমস্যাগুলি সমাধান করেন তা আমাকে বলুন ।


এটি একটি ভাল প্রশ্ন - সম্ভাব্য গভীরতা অনেক। আমি জাভাতে মাল্টি-থ্রেডযুক্ত অ্যাপ্লিকেশনগুলির সাথে কিছু ভাল অভিজ্ঞতাও অর্জন করেছি, তবে আরও শিখতে চাই।
মাইকেল কে

এখনও অবধি, আমাদের কয়েকটি ভাল উত্তর রয়েছে। এই অঞ্চলে আপনাকে সাহায্য করতে চাইলে যে কেউ ছুরিকাঘাতের উদ্যোগ নিতে চান?
বারিন লরিটস

সাম্প্রতিক কোডিংয়ের জন্য টোটাল ভিউ ডিবাগারটি একটি দুর্দান্ত উপকারী সরঞ্জাম, যদিও কিছুটা শেখার বক্ররেখা লাগে - টোটালভিউটেক
প্রোডাক্টস

লগইন আপনাকে শেষ দুটি প্রশ্নে সহায়তা করতে পারে।
আমির রেজায়ে

আমি যা খুঁজছি তা হল মানুষের প্রক্রিয়া। এটি এমন অঞ্চল যেখানে আমি যে সরঞ্জামগুলি ব্যবহার করছি তা অপর্যাপ্ত, তবে কাজটি সম্পন্ন করতে পারে। আমি অন্য কারও নিবন্ধের উদ্ধৃতি এবং পদ্ধতি সম্পর্কে আরও উদ্বিগ্ন সম্পর্কে কম উদ্বিগ্ন।
বেরিন লরিটশ

উত্তর:


11

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

আমি জানি অনেক সেরা প্রোগ্রামার বিশ্ববিদ্যালয় শেষ করেনি। আমার হিসাবে আমি দর্শন পড়াশোনা।

সি / সি ++, সি #, জাভা ইত্যাদি)। বিশেষত, আপনার বিকাশের পরিবেশে একটি সিস্টেমে সহজেই ঘটে এমন পরিস্থিতি পুনরায় তৈরি করা অসম্ভব হয়ে উঠতে পারে।

হাঁ

কীভাবে অনুমান করা যায় যে কী একযোগে বনাম তৈরি করা যেতে পারে what

আমরা আমাদের আর্কিটেকচারটি নিজের কাছে (প্রথমত) এবং অন্যদের কাছে (দ্বিতীয়ত) পরিষ্কার করার জন্য 1000 মাইল উচ্চতর রূপক দিয়ে শুরু করি।

যখন আমরা এই সমস্যার মুখোমুখি হয়েছি, আমরা সর্বদা সহবর্তী বস্তুর দৃশ্যমানতা অ-সহবর্তী বিষয়গুলিতে সীমাবদ্ধ করার একটি উপায় খুঁজে পেয়েছি।

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

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

স্কেল সহ এটি যাইহোক অনেক সহজ।

আপনি কীভাবে ত্রুটির পরিস্থিতি পুনরুত্পাদন করবেন এবং অ্যাপ্লিকেশনটি কার্যকর হওয়ার সাথে সাথে কী ঘটছে তা দেখুন?

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

আপনি অ্যাপ্লিকেশনের বিভিন্ন সমবর্তী অংশগুলির মধ্যে মিথস্ক্রিয়াটিকে কীভাবে কল্পনা করতে পারেন?

আবার কোনও আসল উত্তর নেই: আমরা হোয়াইটবোর্ডে আমাদের রূপকটি ডিজাইন করেছি এবং আমরা এটি চেষ্টা করার চেষ্টা করি যে স্থাপত্য দিকটিতে কোনও দ্বন্দ্ব নেই।

আর্চের জন্য এখানে আমি নিল ফোর্ডের সংজ্ঞা বলতে চাই: ডাব্লু আর্কিটেকচার এমন সব কিছু যা পরে পরিবর্তন করা খুব কঠিন হবে।

প্রোগ্রামিং আমাকে বিশ্বাস করতে পরিচালিত করে যে আপনার অনুক্রমিক প্রোগ্রামিংয়ের চেয়ে আলাদা মানসিকতা দরকার।

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


6

আমার কাছে সমস্ত তথ্য। আপনার ডেটা ঠিক ভাঙা, এবং সমান্তরাল প্রক্রিয়াজাতকরণ সহজ। ধরে রাখার, অচলাবস্থার সমস্ত সমস্যা এবং তাই দূরে চলে যান।

আমি জানি যে এটি সমান্তরাল একমাত্র উপায় নয়, তবে আমার জন্য এটি সবচেয়ে বেশি কার্যকর।

উদাহরণস্বরূপ, একটি (অত তাড়াতাড়ি নয়) গল্প:

আমি ২০০ through থেকে ২০০৯ এর মধ্যে একটি বড় আর্থিক (স্টক-মার্কেট নিয়ন্ত্রণ) সিস্টেমে কাজ করেছি এবং ডেটা প্রসেসিংয়ের পরিমাণ খুব বড় ছিল। উদাহরণস্বরূপ, কোনও ক্লায়েন্টের 1 একক অ্যাকাউন্টে করা সমস্ত গণনাগুলি তাদের গড় ওয়ার্কস্টেশনে প্রায় 1 ~ 3 সেকেন্ড নিয়েছিল এবং 30k এরও বেশি অ্যাকাউন্ট ছিল। প্রতি রাতে, সিস্টেমটি বন্ধ করা ব্যবহারকারীদের জন্য একটি বড় ব্যথা হয়ে থাকে (সাধারণত 6 ঘন্টাের বেশি প্রক্রিয়াজাতকরণ, তাদের জন্য কোনও ত্রুটি-মার্জিন ছাড়াই)।

সমস্যাটি অধ্যয়ন করার পরে আরও জানা গেছে যে আমরা বেশ কয়েকটি কম্পিউটারের মধ্যে গণনাগুলি প্যারালাইলাইজ করতে পারি, তবে আমাদের এখনও পুরাতন ডাটাবেস সার্ভারে একটি বিশাল বাধা থাকবে (এসকিউএল 2000 সার্ভার এসকিউএল 6.5 অনুকরণকারী)।

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

1) একক একক প্রযোজক, হয় হয় ডাটাবেস পড়ার জন্য বা তার উপর ধারাবাহিকভাবে লেখার জন্য। এখানে কোন সহমত অনুমোদিত নয়। নির্মাতা ভোক্তাদের জন্য কাজের একটি সারি প্রস্তুত করেছিলেন। ডাটাবেস সম্পূর্ণরূপে এই প্রযোজকের অন্তর্গত।

2) বেশ কয়েকটি ভোক্তা, বেশ কয়েকটি মেশিনে। প্রতিটি গ্রাহক গণনা করার জন্য প্রস্তুত, সারিবদ্ধ থেকে পুরো প্যাকেট ডেটা পেয়েছিলেন। প্রতিটি ডিকিউ অপারেশন সিঙ্ক্রোনাইজ করা হয়।

3) গণনার পরে, প্রতিটি ভোক্তা ডেটা অবিরাম রাখার জন্য প্রযোজকের কাছে মেমোরি সিঙ্কনেটেড কাতারে ডেটা ফেরত পাঠায়।

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

দুর্বল একত্রীকরণ ব্যবস্থাপনার দ্বারা সঞ্চারিত সমস্যাগুলি কেবল সরিয়ে নেওয়া এসকিউএল 6.5 আমাদের একটি বড় সুবিধা দিয়েছে। বাকিগুলি বেশ লিনিয়ার ছিল, প্রতিটি নতুন কম্পিউটার "গ্রিড" এ যুক্ত হয়ে প্রসেসিংয়ের সময় কমিয়ে দেয়, যতক্ষণ না আমরা ডাটাবেসে ক্রমবর্ধমান পাঠ / লেখার ক্রিয়াকলাপের "সর্বাধিক দক্ষতা" পৌঁছেছি।


2

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

আমাকে আপনার প্রশ্নটির উত্তর এক সাথে দেওয়ার চেষ্টা করুন

* How do you figure out what can be made concurrent vs. what has to be sequential?

এর জন্য সম্মতি ব্যবহার করুন

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

2) ভারী i / o যা অপারেশনগুলি সমান্তরাল করা যেতে পারে। সবচেয়ে ভাল উদাহরণ লগার। লগার থ্রেড একটি পৃথক থ্রেড হতে পারে।

3) বিভিন্ন ডেটা অনুরূপ কাজ। যদি এমন কিছু টাস্ক থাকে যা বিভিন্ন ডেটাতে ঘটে তবে প্রকৃতির সাথে একই রকম হয় তবে বিভিন্ন থ্রেড এটি করতে পারে। সর্বোত্তম উদাহরণ হ'ল সার্ভারের অনুরোধগুলি।

এবং অবশ্যই অনেক অন্যান্য প্রয়োগের উপর নির্ভর করে এটি পছন্দ করে।

* How do you reproduce error conditions and view what is happening as the application executes?

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

* How do you visualize the interactions between the different concurrent parts of the application?

আপনার লকগুলিতে লগগুলি রাখুন, যাতে আপনি জানতে পারবেন কে কখন এবং কখন লক করছে এবং কে তালাবন্ধির চেষ্টা করেছে। আমি আগে বলেছি প্রতিটি থ্রেডে কি চলছে তা বুঝতে লগটিতে থ্রেড আইডি রাখার চেষ্টা করুন।

এটি কেবলমাত্র আমার পরামর্শের অংশ যা প্রায় 3 বছরের বহুবিধ অ্যাপ্লিকেশনটিতে কাজ করে এবং আশা করি এটি সাহায্য করবে।


2
  • কীভাবে অনুমান করা যায় যে কী একযোগে বনাম তৈরি করা যেতে পারে what

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

এরলংয়ের সাথে কাজ করা আমি একত্রীকরণ বার্তাটি পাস করার ধারণা এবং একমত হওয়ার জন্য অভিনেতার মডেলটিকে একেবারে পছন্দ করতে পেরেছি - এটি স্বজ্ঞাত, কার্যকর এবং পরিষ্কার।

অভিনেতা সমঝোতার অফ অফ

অভিনেতা মডেল কয়েকটি মূল নীতি নিয়ে গঠিত:

  • কোনও ভাগ করা রাষ্ট্র নেই
  • লাইটওয়েট প্রক্রিয়া
  • অ্যাসিনক্রোনাস বার্তা-পাসিং
  • আগত বার্তাগুলি বাফার করতে মেলবক্স
  • প্যাটার্ন মিলের সাথে মেলবক্স প্রক্রিয়াকরণ

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

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

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

এই মডেলটি এয়ার্ল্যাং একচেটিয়া নয়, এমনকি জাভা এবং। নেট বিশ্বের মধ্যেও এগুলি তৈরি করার উপায় রয়েছে - আমি কনকুরেন্সি এবং সমন্বয় রানটাইম (সিসিআর) এবং রেলেং (জাভা জন্য জেটল্যাংও আছে) দেখব।

  • আপনি কীভাবে ত্রুটির পরিস্থিতি পুনরুত্পাদন করবেন এবং অ্যাপ্লিকেশনটি কার্যকর হওয়ার সাথে সাথে কী ঘটছে তা দেখুন?

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

  • আপনি অ্যাপ্লিকেশনের বিভিন্ন সমবর্তী অংশগুলির মধ্যে মিথস্ক্রিয়াটিকে কীভাবে কল্পনা করতে পারেন?

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


1

- আমার উত্তরগুলি এমএস / ভিজ্যুয়াল স্টুডিও নির্দিষ্ট -

কীভাবে অনুমান করা যায় যে কী একযোগে বনাম তৈরি করা যেতে পারে what

এটি ডোমেন জ্ঞান নিতে চলেছে, এখানে কোনও কম্বল স্টেটমেন্ট তা কভার করার দরকার নেই।

আপনি কীভাবে ত্রুটির পরিস্থিতি পুনরুত্পাদন করবেন এবং অ্যাপ্লিকেশনটি কার্যকর হওয়ার সাথে সাথে কী ঘটছে তা দেখুন?

প্রচুর লগিং, উত্পাদন প্রয়োগে এটি লগিং চালু / অফ / আপ করতে সক্ষম হওয়ায় এটি উত্পাদন পেতে। VS2010 ইন্টেলিট্রেস এটি দিয়ে সহায়তা করতে সক্ষম হবে বলে মনে করা হচ্ছে, তবে আমি এটি এখনও ব্যবহার করি নি।

আপনি অ্যাপ্লিকেশনের বিভিন্ন সমবর্তী অংশগুলির মধ্যে মিথস্ক্রিয়াটিকে কীভাবে কল্পনা করতে পারেন?

আমার এটির উত্তম উত্তর নেই, একটি দেখতে ভাল লাগবে।


লগিং কোডটি কার্যকর করে কীভাবে পরিবর্তন করবে এবং এভাবে প্রদর্শিত না হওয়ার পরে আপনার ত্রুটি হতে পারে।
ম্যাথু

1

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

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

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

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

তারপরে আবার সেখানে 'বিতরণ' নিক্ষেপ করুন এবং সালিসি একটি আবশ্যক হয়ে ওঠে। আপনার একটি নির্দিষ্ট উদাহরণ আছে?


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

1

আপনি কীভাবে ত্রুটির পরিস্থিতি পুনরুত্পাদন করবেন এবং অ্যাপ্লিকেশনটি কার্যকর হওয়ার সাথে সাথে কী ঘটছে তা দেখুন?

আপনি অ্যাপ্লিকেশনের বিভিন্ন সমবর্তী অংশগুলির মধ্যে মিথস্ক্রিয়াটিকে কীভাবে কল্পনা করতে পারেন?

আমার অভিজ্ঞতার ভিত্তিতে এই দুটি দিকের উত্তর নিম্নরূপ:

বিতরণ ট্রেসিং

ডিস্ট্রিবিউটড ট্রেসিং এমন প্রযুক্তি যা আপনার সিস্টেমের প্রতিটি স্বতন্ত্র সমসাময়িক উপাদানগুলির সময়কালীন ডেটা ক্যাপচার করে এবং এটি আপনাকে গ্রাফিকাল ফর্ম্যাটে উপস্থাপন করে। সমবর্তী মৃত্যুদন্ড কার্যকর করার প্রতিনিধিত্বগুলি সর্বদা আন্তঃবিবাহিত থাকে, আপনাকে সমান্তরালে কী চলছে এবং কী নয় তা দেখার অনুমতি দেয়।

বিতরণ করা ট্রেসিং এর মূল উত্স অবশ্যই (বিতরণযোগ্য) বিতরণ ব্যবস্থায় রয়েছে, যা সংজ্ঞা অনুসারে অ্যাসিনক্রোনাস এবং অত্যন্ত সমবর্তী। বিতরণ ট্রেসিং সহ একটি বিতরণ সিস্টেম লোককে এতে সক্ষম করে:

ক) গুরুত্বপূর্ণ বাধা চিহ্নিত করুন, খ) আপনার অ্যাপ্লিকেশনটির আদর্শ 'রানের' একটি চাক্ষুষ উপস্থাপনা প্রাপ্ত করুন এবং গ) সাম্প্রতিক আচরণ কী সম্পাদিত হচ্ছে তার দৃশ্যমানতা সরবরাহ করুন, d) সময়সীমার তথ্য প্রাপ্ত করুন যা আপনার পরিবর্তনের মধ্যে পার্থক্য নির্ধারণের জন্য ব্যবহার করা যেতে পারে সিস্টেম (আপনার কাছে শক্তিশালী এসএলএস থাকলে অত্যন্ত গুরুত্বপূর্ণ)।

বিতরণ ট্রেসিং এর পরিণতিগুলি হ'ল:

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

  2. অনেকগুলি বিভিন্ন সরঞ্জাম বিদ্যমান, এগুলির সমস্ত একে অপরের সাথে আন্তঃযোগযোগ্য নয়। এটি কিছুটা ওপেনট্রেসিংয়ের মতো মানাদির দ্বারা সংশ্লেষিত তবে পুরোপুরি সমাধান হয়নি।

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

  4. বর্তমান সরঞ্জামগুলি ধরে নিয়েছে যে অতিরিক্ত বাড়াতে আপনার কাছে মেমরি এবং সঞ্চয় রয়েছে। আপনার সীমাবদ্ধতার উপর নির্ভর করে টাইমসারি সার্ভার হোস্টিং সস্তা নাও হতে পারে।

সফ্টওয়্যার ট্র্যাক করার সময় ত্রুটি

আমি উপরে সেন্ট্রিটির সাথে প্রাথমিকভাবে লিঙ্ক করেছি কারণ এটি সেখানে সর্বাধিক ব্যবহৃত সরঞ্জাম এবং সঠিক কারণে - সেন্ট্রাল সার্ভারের সাথে দেখা ত্রুটির একটি স্ট্যাক ট্রেস একই সাথে ফরোয়ার্ড করতে সেন্ট্রি হাইজ্যাক রানটাইম এক্সিকিউশন এর মতো ত্রুটি ট্র্যাকিং সফ্টওয়্যার।

সাম্প্রতিক কোডগুলিতে এই জাতীয় ডেডিকেটেড সফটওয়্যারের নেট সুবিধা:

  1. সদৃশ ত্রুটিগুলি সদৃশ হয় না । অন্য কথায়, যদি এক বা একাধিক সমবর্তী সিস্টেম একই ব্যতিক্রম সম্মুখীন, Sentry হবে বাড়ায় একটি ঘটনা রিপোর্ট, কিন্তু ঘটনার দু কপি জমা না।

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

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

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

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

  1. (সেন্ট্রি-সুনির্দিষ্ট) সিস্টেমের পরীক্ষার জন্য আপনার পৃথক সেন্ট্রি রিপোর্টিং ড্যাশবোর্ড থাকতে পারে, যা আপনাকে পরীক্ষায় ত্রুটিগুলি ধরতে দেয়।

এই ধরনের সফ্টওয়্যারগুলির অসুবিধাগুলির মধ্যে রয়েছে:

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

  2. সমস্ত ভাষা সমানভাবে সমর্থিত নয়, কারণ এই সিস্টেমগুলির মধ্যে অনেকগুলি স্পষ্টতই একটি ব্যতিক্রম ধরায় নির্ভর করে এবং সমস্ত ভাষা শক্তিশালী ব্যতিক্রমগুলির বৈশিষ্ট্য দেয় না। বলা হচ্ছে, প্রচুর সিস্টেমের জন্য ক্লায়েন্ট রয়েছে।

  3. এগুলি সুরক্ষা ঝুঁকি হিসাবে উত্থাপিত হতে পারে, কারণ এর মধ্যে অনেকগুলি সিস্টেম মূলত বদ্ধ-উত্স। এই ক্ষেত্রে, তাদের গবেষণা করার ক্ষেত্রে যথাযথ অধ্যবসায় করুন, বা, যদি পছন্দ হয় তবে আপনার নিজের রোল করুন।

  4. তারা আপনাকে প্রয়োজনীয় তথ্য সর্বদা না দেয়। দৃশ্যমানতা যুক্ত করার সমস্ত প্রচেষ্টা সহ এটি একটি ঝুঁকি।

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

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

কিছু অতিরিক্ত পরামর্শ

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

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

    • কোড উপাদানগুলির মধ্যে টেস্ট লিঙ্কগুলি কেবলমাত্র উপাদানটি নয়। এটি একটি পূর্ণ-বিকাশযুক্ত ইন্টিগ্রেশন পরীক্ষার সাথে বিভ্রান্ত করবেন না - যা প্রতিটি উপাদানগুলির মধ্যে প্রতিটি লিঙ্ক পরীক্ষা করে এবং তারপরেও এটি কেবলমাত্র চূড়ান্ত রাষ্ট্রের বৈশ্বিক বৈধতার সন্ধান করে। এটি ত্রুটিগুলি ধরা একটি ভয়ঙ্কর উপায়।

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

উপাদানগুলির নিজের পরীক্ষার জন্য প্রচুর উপাদান জড়িত পরীক্ষাগুলি ভাঙা এবং উপাদানগুলির মধ্যে প্রতিটি কীভাবে যোগাযোগ করে তা একটি পরীক্ষার মাধ্যমে আপনাকে আপনার কোডের বৈধতার উপর আস্থা বাড়িয়ে তোলে। এ জাতীয় কঠোর পরিশ্রমের পরীক্ষাগুলি আপনাকে পরিষেবাগুলির মধ্যে চুক্তি কার্যকর করার পাশাপাশি অপ্রত্যাশিত ত্রুটিগুলি যখন একবারে চালানো হয় তখন তা ধরা দেয়।

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

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

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

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

কীভাবে একত্রিত করা যায় এবং কী অনুক্রমিকভাবে তৈরি করা যায় তা কীভাবে আবিষ্কার করবেন?

সর্বাধিক সমবর্তী সিস্টেমটিতে কাজ করা শিখেছি সবচেয়ে বড় পাঠটি হ'ল: আপনার কখনও পর্যাপ্ত মেট্রিক থাকতে পারে না । আপনার অ্যাপ্লিকেশনের মেট্রিকগুলি একেবারে সমস্ত গাড়ি চালানো উচিত - আপনি যদি সমস্ত কিছু পরিমাপ না করে থাকেন তবে আপনি প্রকৌশলী নন।

মেট্রিক ছাড়া আপনি কয়েকটি খুব গুরুত্বপূর্ণ কাজ করতে পারবেন না:

  1. সিস্টেমে পরিবর্তনগুলি দ্বারা পার্থক্য নির্ধারণ করুন। আপনি যদি জানেন না যে টিউনিং নোবড এড মেট্রিক বি উপরে গিয়েছে এবং মেট্রিক সি নীচে যায় তবে আপনি জানেন না যে লোকেরা যখন আপনার সিস্টেমে অপ্রত্যাশিতভাবে ম্যালিগন্যান্ট কোডটি চাপায় (তখন তারা আপনার সিস্টেমে কোডটি চাপ দেবে) কীভাবে আপনার সিস্টেমটি ঠিক করতে হবে? ।

  2. জিনিসগুলির উন্নতি করার জন্য আপনার পরবর্তী কী করা দরকার তা বুঝতে পারেন। যতক্ষণ না আপনি জানেন যে অ্যাপ্লিকেশনগুলি মেমোরিতে কম চলছে, আপনার সার্ভারগুলির জন্য আপনার আরও বেশি মেমরি পাওয়া উচিত বা আরও বেশি ডিস্ক কিনবেন কিনা তা আপনি বুঝতে পারবেন না।

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

বলা হচ্ছে, থাম্বের কয়েকটি নিয়ম অবশ্যই রয়েছে:

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

  2. একই কোরটিতে সিপিইউ-বাউন্ড টাস্কের সাথে আই / ও বাউন্ড টাস্কটি কখনই মিশ্রিত করবেন না। (উদাহরণস্বরূপ) এমন কোনও ওয়েব ক্রলারটি লিখবেন না যা একই থ্রেডে দশটি সমবর্তী অনুরোধগুলি প্রবর্তন করে, তারা আসার সাথে সাথে এগুলিকে স্ক্র্যাপ করে দেয় এবং পাঁচশত স্কেল করার আশা করে - I / O অনুরোধগুলি সমান্তরালে একটি কাতারে যাবে, তবে সিপিইউ এখনও সিরিয়ালি তাদের মধ্য দিয়ে যাবে। (এই একক থ্রেডযুক্ত ইভেন্ট চালিত মডেলটি জনপ্রিয় একটি, তবে এটি এই দিকের কারণে সীমাবদ্ধ - এটি বোঝার পরিবর্তে লোকেরা কেবল তাদের হাতকে ঘেউ ঘেউ করে বলে এবং নোড স্কেল করে না, আপনাকে উদাহরণ দেওয়ার জন্য)।

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

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


0

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

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


0

কীভাবে অনুমান করা যায় যে কী একযোগে বনাম তৈরি করা যেতে পারে what

আপনি লিখতে খুব সুন্দর প্রতিটি জিনিস সম্মতিযুক্ততার সুবিধা নিতে পারে বিশেষত "ডিভাইড এ বিজয়ী" ব্যবহারের ক্ষেত্রে। একটি আরও ভাল প্রশ্ন একযোগে হওয়া উচিত?

সি # তে জোসেফ আলবাহারীর থ্রেডিং পাঁচটি সাধারণ ব্যবহারের তালিকা রয়েছে।

মাল্টিথ্রেডিংয়ের অনেকগুলি ব্যবহার রয়েছে; এখানে সবচেয়ে সাধারণ:

একটি প্রতিক্রিয়াশীল ব্যবহারকারী ইন্টারফেস বজায় রাখা

একটি সমান্তরাল "কর্মী" থ্রেডে সময় গ্রহনের কাজগুলি চালিয়ে, মূল ইউআই থ্রেড কীবোর্ড এবং মাউস ইভেন্টগুলি প্রক্রিয়া চালিয়ে যেতে বিনামূল্যে।

অন্যথায় অবরুদ্ধ সিপিইউর দক্ষ ব্যবহার করা

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

সমান্তরাল প্রোগ্রামিং

নিবিড় গণনা সম্পাদনকারী কোডটি মাল্টিকোর বা মাল্টিপ্রসেসর কম্পিউটারগুলিতে দ্রুত চালিত করতে পারে যদি কাজের চাপটি "বিভাজন এবং বিজয়ী" কৌশলটিতে একাধিক থ্রেডের মধ্যে ভাগ করা হয় (পার্ট 5 দেখুন)।

জল্পনা-কল্পনা

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

অনুরোধগুলি একযোগে প্রক্রিয়া করার অনুমতি দিচ্ছে

একটি সার্ভারে, ক্লায়েন্টের অনুরোধগুলি একই সাথে উপস্থিত হতে পারে এবং তাই সমান্তরালে হ্যান্ডেল করা প্রয়োজন (আপনি যদি এএসপি.এনইটি, ডাব্লুসিএফ, ওয়েব পরিষেবাদি বা রিমোটিং ব্যবহার করেন তবে .NET ফ্রেমওয়ার্কটি স্বয়ংক্রিয়ভাবে এর জন্য থ্রেড তৈরি করে)। এটি কোনও ক্লায়েন্টের ক্ষেত্রেও কার্যকর হতে পারে (যেমন, পিয়ার-টু-পিয়ার নেটওয়ার্কিং হ্যান্ডলিং even বা এমনকি ব্যবহারকারী থেকে একাধিক অনুরোধ) requests

আপনি যদি উপরের একটিটির চেষ্টা না করে থাকেন তবে আপনি সম্ভবত এটি সম্পর্কে সত্যই কঠিন চিন্তা করতে চান।

আপনি কীভাবে ত্রুটির পরিস্থিতি পুনরুত্পাদন করবেন এবং অ্যাপ্লিকেশনটি কার্যকর হওয়ার সাথে সাথে কী ঘটছে তা দেখুন?

আপনি যদি নেট ব্যবহার করছেন এবং আপনার লিখিত ব্যবহারের কেসগুলি আপনি CHESS ব্যবহার করতে পারেন যা নির্দিষ্ট থ্রেড ইন্টারলাইভিং শর্তাদি পুনরায় তৈরি করতে পারে যা আপনাকে আপনার ঠিকঠাক পরীক্ষা করতে সক্ষম করে।

আপনি অ্যাপ্লিকেশনের বিভিন্ন সমবর্তী অংশগুলির মধ্যে মিথস্ক্রিয়াটিকে কীভাবে কল্পনা করতে পারেন?

ইহা পারিপার্শ্বিক অবস্থা উপর নির্ভর করে। কর্মী দৃশ্যের জন্য আমি একজন পরিচালক-অধস্তন মনে করি। ম্যানেজার অধস্তনকে কিছু করতে বলে এবং স্ট্যাটাস আপডেটের জন্য অপেক্ষা করে।

যুগপত সম্পর্কযুক্ত কাজের জন্য আমি ট্র্যাফিকের পৃথক লেনে লিফট বা গাড়িগুলির কথা ভাবি।

সিঙ্ক্রোনাইজেশনের জন্য আমি কখনও কখনও ট্র্যাফিক লাইট বা টার্ন-স্টাইলের কথা ভাবি।

এছাড়াও আপনি যদি সি # 4.0 ব্যবহার করছেন তবে আপনি টাস্ক সমান্তরাল গ্রন্থাগারটি একবার দেখে নিতে পারেন


0

এই প্রশ্নের জন্য আমার উত্তর:

  • কীভাবে অনুমান করা যায় যে কী একযোগে বনাম তৈরি করা যেতে পারে what

প্রথমে আমার জেনে রাখা উচিত কেন আমার একত্রে ব্যবহার করা উচিত, কারণ আমি জানতে পেরেছি যে লোকেরা সম্মতিযুক্ত হওয়ার পিছনে ধারণাটি নিয়ে বেরিয়ে আসে তবে তারা যে সমস্যাটি সমাধান করার চেষ্টা করছে সে সম্পর্কে সবসময় ভাবেন না।

আপনার যদি কুইলস, ওয়ার্কফ্লোস ইত্যাদির মতো বাস্তব জীবনের পরিস্থিতি অনুকরণ করতে হয় তবে আপনার সম্ভবত একটি সমবর্তী পদ্ধতির ব্যবহার করতে হবে।

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

  • আপনি কীভাবে ত্রুটির পরিস্থিতি পুনরুত্পাদন করবেন এবং অ্যাপ্লিকেশনটি কার্যকর হওয়ার সাথে সাথে কী ঘটছে তা দেখুন?

আমি এই বিষয়ে বিশেষজ্ঞ নই তবে আমি মনে করি সমবর্তী সিস্টেমগুলির জন্য এটি সঠিক পদ্ধতির নয়। একটি তাত্ত্বিক পদ্ধতির চয়ন করা উচিত, সমালোচনামূলক ক্ষেত্রগুলিতে 4 টি অচলিত প্রয়োজনীয়তার সন্ধান করা:

  1. অ-পূর্বশক্তি
  2. ধরুন এবং অপেক্ষা করুন
  3. চলমান বর্জন
  4. বিজ্ঞপ্তি চেইন

    • আপনি অ্যাপ্লিকেশনের বিভিন্ন সমবর্তী অংশগুলির মধ্যে মিথস্ক্রিয়াটিকে কীভাবে কল্পনা করতে পারেন?

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


0

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

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

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

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

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

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

সংক্ষেপে বলা:
শুরু করুন:
মনে
টক
টেস্ট
লিখুন কেবল
পড়ুন
টেস্ট
লিখুন
ডিবাগ
এতে যান শুরু করুন

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