এমন একটি সময়কালকে উত্সাহিত করা যেখানে সফ্টওয়্যারটি দ্রুত চালিত করার জন্য প্রত্যেকে কোনও ধারণার চেষ্টা করতে পারে?


17

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

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

আপনি কি সম্মত হন যে বিবিধ চিন্তাভাবনা সফ্টওয়্যার কর্মক্ষমতা উন্নত করার উপায় খুঁজতে সাহায্য করবে? কেন? কেন না?

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

অবশেষে, স্ল্যাক অফ হওয়ার সম্ভাবনা তৈরি না করে ভাল ফলাফল নিশ্চিত করতে কত "সময়" বরাদ্দ করা উচিত?

"কিছু করার দ্রুত উপায়" প্রমাণ করার জন্য কি পরীক্ষার প্রয়োজন? (2011-06-07 যোগ হয়েছে)

সম্পর্কিত:

( অনুগ্রহমূলক উদ্দেশ্যে কেবল -2011/06/07 টিমের আকার 2-4 বিকাশকারী, কোনও ডেডিকেটেড কিউএ নেই code আনুপাতিক মৃত্যুর সময় এমনকি যদি এটি একটি একক বাধা প্রকাশ না করে))


যখন আপনি বলছেন পারফরম্যান্সটি উন্নতি করুন, আপনি কি কোনও পারফরম্যান্স / বেঞ্চমার্ক দৃষ্টিকোণ থেকে কঠোরভাবে কথা বলছেন, বা আপনি আরও স্বজ্ঞাত ইউআই, আরও ভাল ওয়ার্কফ্লো ইত্যাদি বোঝাচ্ছেন, মানে আরও ভাল পণ্য?
রিচার্ড

সম্ভবত প্রাসঙ্গিক টেক টক। এটি কয়েকটি সফ্টওয়্যার সংস্থার এমন কাজ করার চেষ্টা নিয়ে আলোচনা করেছে।
ProdigySim

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

উত্তর:


21

আপনার সেরা বাজিটি হটস্পটগুলিকে একজন প্রোফাইলারের সাথে সনাক্ত করে এবং একটি দল হিসাবে - হটস্পটগুলি কীভাবে ঠিক করতে হয় তা নিয়ে আলোচনা করে।

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

প্রোগ্রামারদের কোডবেসে ধারণাটি চেষ্টা করে বোকামি করে হ্যাক করা মানে কী হচ্ছে এবং আপনার এটি কার্যকর কিনা তা নিয়ে আপনার কোনও নিয়ন্ত্রণ নেই।


6

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

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

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


1

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


1

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

  1. সমালোচনামূলক পরিস্থিতিতে বা কোড পাথগুলিতে ফোকাস দেওয়ার চেষ্টা করুন যেখানে বাধাগুলি সন্দেহযুক্ত। অনুকূলিতকরণের প্রয়োজন হয় না এমন জিনিসগুলির অনুকূলকরণে সময় নষ্ট করবেন না (যদি এটি ভাঙা না হয় ...)
  2. গোষ্ঠীটি ছোট রাখুন এবং কোডটি ভাল জানেন এমন লোকদের প্রতি দৃষ্টি নিবদ্ধ রাখুন। বৈশিষ্ট্যের পরীক্ষক এবং প্রোগ্রাম ম্যানেজারকে অন্তর্ভুক্ত করতে ভুলবেন না - এগুলির কী অন্তর্দৃষ্টি রয়েছে এবং সেগুলি অংশ নেওয়া থেকে উপকৃত হতে পারে, বা কীভাবে তারা আরও ভাল পরীক্ষা করতে পারে সে সম্পর্কিত তথ্য সংগ্রহ করতে পারে।
  3. অঞ্চলটির মালিককে একটি উচ্চ স্তরের আর্কিটেকচারাল ব্লক স্তরের চিত্র এবং অঞ্চলটির ওভারভিউ দেওয়ার মাধ্যমে সেশনটি শুরু করুন। মূল উপাদানগুলি কী এবং সংক্ষেপে তারা কী করে তা বর্ণনা করে। আপনি বিস্মিত হবেন যে আমরা কোডটি খনন করার পরে ব্লক ডায়াগ্রামটি কতবার বাস্তবতার প্রতিফলন ঘটেনি। (আসল উদ্ধৃতি: "আমি জানতাম না যে আমরা এখনও সেই উপাদানটি ব্যবহার করেছি I আমি ভেবেছিলাম যে আমরা বছরগুলি আগে মুক্তি পেয়েছি!")
  4. কার্যকরী বাগ পাশাপাশি পারফেক্ট ইস্যুর সন্ধানের প্রত্যাশা করুন। সেটা একটা ভাল জিনিস. এছাড়াও, আশা করুন যে, কখনও কখনও, আপনি উল্লেখযোগ্য কিছুই পাবেন না। এটিও খুব ভাল জিনিস হতে পারে।
  5. বেশ কয়েকটি দীর্ঘ অধিবেশন আশা করি। এগুলি কার্যনির্বাহী সভা। আরামদায়ক হন এবং এটির মাধ্যমে কাজ করুন। আপনি যখন সমস্ত প্রসারিত প্রসারিতের জন্য সহযোগিতা করতে পারেন তখন আপনি আরও অনেক কিছু করতে পারেন।
  6. নোট, ভাল নোট নিন। আপনি যদি কোনও ত্রুটিযুক্ত ট্র্যাকিং ডাটাবেস ব্যবহার করেন, ততক্ষণে সমস্যাগুলি খোলার জন্য বিবেচনা করুন, যদি সেগুলি কম অগ্রাধিকার হয়।

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


0

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

... এবং কাজটি করার জন্য, এই ক্রমে দুটি পদক্ষেপ রয়েছে:

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

  2. ১ নম্বর বা এক ঘণ্টার বেশি সময় ব্যয় করবেন না যদি আপনি এক ঘন্টার মধ্যে সমস্যাটি খুঁজে না পান, তবে প্রশ্নে স্পটটি খুঁজে পেতে কোনও প্রোফাইলার ব্যবহার করুন। আপনি সমস্যার বিষয়টি জানতে পারলে, আপনি 1 নম্বরে ফিরে যেতে পারেন এবং নিজের চিহ্নিত কোডটি উন্নত করার সেরা উপায়টি খুঁজে বের করে আবার তা করতে পারেন।


0

সাধারণভাবে (**) আপনি পরীক্ষার মাধ্যমে আরও ভাল পারফরম্যান্স পাবেন না।

আপনি এটি দ্বারা পেতে

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

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

আপনার অন্যান্য প্রশ্নের এই উত্তরটি পরীক্ষা করে দেখুন।

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

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

কেবল একটি দৃ concrete় উদাহরণ দেওয়ার জন্য, এখানে সোর্স কোড সহ একটি প্রোগ্রাম রয়েছে (সি ++ এ) যা একটি কাজ করে। এটি যে সত্যিকারের সি প্রোগ্রামে আমি কাজ করেছি তা থেকে এটি পাতিত করা হয়।

এটি যা করার ইচ্ছা করেছিল তা করে, তবে এর সময়ের কোন অংশটি সত্যই প্রয়োজনীয় নয়? এটি কত দ্রুত করা যায়?

ঠিক আছে, প্রোগ্রামটির প্রথম সংস্করণে, পুরোপুরি যুক্তিসঙ্গত-চেহারা এবং ননলোকাল (কোনও প্রোফাইলারের কাছে অদৃশ্য) সময় নিয়েছিল 33.3%। যখন এটি প্রতিস্থাপন করা হয়েছিল, সেই সময়টি সাশ্রয় হয়েছিল এবং এটি ছিল প্রোগ্রামটির দ্বিতীয় সংস্করণ।

প্রোগ্রামের দ্বিতীয় সংস্করণে, অন্য কিছু (যে কোনও প্রোফাইলারের কাছে অদৃশ্য) সরিয়ে ফেলা হতে পারে এটির 16.7% সময় নিচ্ছিল। এটি অপসারণ করা সংস্করণ 3-এ পৌঁছেছে।

সংস্করণ 3-এ, 13% সরানো হয়েছে। যা অবশিষ্ট ছিল, তার মধ্যে 66% সরানো হয়েছে। এর পরে যা ছিল তার মধ্যে 61% সরানো হয়েছে!

তারপরে অবশেষে, তার পরে যা অবশিষ্ট ছিল, তার মধ্যে 98% সরানো হয়েছে!

তাহলে বড় ছবি কী? আসল প্রোগ্রাম দ্বারা ব্যয় করা প্রতি 1000 চক্রের মধ্যে, কতজন সরানো হয়েছিল? 998!

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


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

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