নরক থেকে নেটওয়ার্কিং ডেটা রেসের শর্ত
আমি অন্য কোনও বিকাশকারীর দ্বারা লিখিত সত্যিকারের পুরানো (এনকোর 32/77) ওয়ার্কস্টেশনে অনুরূপ অ্যাপ্লিকেশনটির সাথে কাজ করার জন্য একটি নেটওয়ার্কিং ক্লায়েন্ট / সার্ভার (উইন্ডোজ এক্সপি / সি #) লিখছিলাম।
অ্যাপ্লিকেশনটি মূলত যা করেছে তা হল আমাদের অভিনব পিসি ভিত্তিক মাল্টি-মনিটর টাচস্ক্রিন ইউআই সহ সিস্টেমটি পরিচালনা করে হোস্ট প্রক্রিয়াটি নিয়ন্ত্রণ করার জন্য হোস্টের নির্দিষ্ট কিছু ডেটা ভাগ করে / পরিচালনা করা।
এটি 3 স্তরের কাঠামো সহ এটি করেছে। যোগাযোগের প্রক্রিয়াটি হোস্টকে / থেকে ডেটা পড়ে / লিখে তথ্য পাঠায়, প্রয়োজনীয় সমস্ত ফর্ম্যাট রূপান্তর (এন্ডিয়ানেশন, ফ্লোটিং পয়েন্ট ফর্ম্যাট ইত্যাদি) করে এবং একটি ডাটাবেজে / থেকে মানগুলি লিখে / পড়েছিল read ডাটাবেসটি কমস এবং টাচস্ক্রিন ইউআই এর মধ্যে একটি ডেটা মধ্যবর্তী হিসাবে কাজ করেছিল। টাচস্ক্রিন ইউআই এর অ্যাপ্লিকেশনটি পিসির সাথে কতগুলি মনিটর সংযুক্ত ছিল তার উপর ভিত্তি করে টাচ স্ক্রিন ইন্টারফেস তৈরি করেছে (এটি স্বয়ংক্রিয়ভাবে এটি সনাক্ত করেছে)।
হোস্ট এবং আমাদের পিসির মধ্যে মানগুলির একটি প্যাকেট প্রদত্ত সময় ফ্রেমে প্রতি রাউন্ড ট্রিপে সর্বোচ্চ 110 মিলিয়ন ডলার লম্বা করে ওয়্যার জুড়ে সর্বোচ্চ 128 মান প্রেরণ করতে পারে (ইউডিপি সরাসরি এক্স-ওভার ইথারনেট সংযোগের সাথে ব্যবহৃত হত) কম্পিউটার)। সুতরাং, সংযুক্ত টাচস্ক্রিনের ভেরিয়েবল সংখ্যার ভিত্তিতে অনুমোদিত ভেরিয়েবলের সংখ্যা কঠোর নিয়ন্ত্রণাধীন ছিল। এছাড়াও, হোস্টটির (যদিও রিয়েল টাইম কম্পিউটিংয়ের জন্য শেয়ারড মেমোরি বাসের সাথে একটি দুর্দান্ত জটিল মাল্টি-প্রসেসরের আর্কিটেকচার রয়েছে) আমার সেল ফোনের প্রসেসিং শক্তি প্রায় 1/100 তম ছিল তাই এটি যতটা সম্ভব কম প্রক্রিয়াকরণ করার দায়িত্ব দেওয়া হয়েছিল এবং এটি সার্ভার / ক্লায়েন্টকে এটির আশ্বাস দেওয়ার জন্য সমাবেশে লিখতে হয়েছিল (হোস্টটি পুরো রিয়েল টাইম সিমুলেশন চালাচ্ছিল যা আমাদের প্রোগ্রাম দ্বারা প্রভাবিত হতে পারে না)।
বিষয়টি ছিল। কিছু মান, যখন টাচস্ক্রিনে পরিবর্তিত হয় কেবলমাত্র সদ্য প্রবেশ করা মানটি গ্রহণ করবে না তবে এ মান এবং পূর্ববর্তী মানের মধ্যে এলোমেলোভাবে চক্র লাগবে। এটি এবং কেবলমাত্র পৃষ্ঠাগুলির নির্দিষ্ট সংমিশ্রণ সহ কয়েকটি নির্দিষ্ট পৃষ্ঠায় কয়েকটি নির্দিষ্ট মানগুলিতে লক্ষণটি প্রদর্শিত হয়েছিল ex প্রাথমিক গ্রাহক গ্রহণযোগ্যতা প্রক্রিয়াটি না চালিয়ে আমরা সমস্যাটি পুরোপুরি মিস করেছি
সমস্যাটি নিখুঁত করার জন্য আমি একটি দোলক মানকে বেছে নিয়েছি:
- আমি টাচস্ক্রিন অ্যাপটি চেক করেছি, এটি দোদুল্যমান ছিল
- আমি ডাটাবেসটি পরীক্ষা করেছিলাম, দোদুল্যমান
- আমি দোলা দিয়ে কমস অ্যাপ্লিকেশনটি চেক করেছি
তারপরে আমি ওয়্যারশার্ক ভেঙে প্যাকেট ক্যাপচারগুলি ম্যানুয়ালি ডিকোডিং শুরু করি। ফলাফল:
- দোলন নয় তবে প্যাকেটগুলি ঠিক দেখাচ্ছে না, খুব বেশি ডেটা ছিল।
আমি কোনও ত্রুটি / ত্রুটি খুঁজে না পেয়ে কমস কোডের প্রতিটি বিবরণে একশো বার পদবিন্যাস করেছি।
অবশেষে আমি অন্য দেবের কাছে ইমেলগুলি ছুঁড়ে ফেলা শুরু করেছিলাম তার বিশদটি জিজ্ঞাসা করে যে আমার কোনও অনুপস্থিত আছে কিনা তা দেখার জন্য তার পরিণতি কীভাবে কাজ করেছে। তারপর আমি এটি খুঁজে পেয়েছি।
স্পষ্টতই, তিনি যখন ডেটা প্রেরণ করেন তখন তিনি সংক্রমণের আগে ডেটার অ্যারেটি ফ্লাশ করেননি, মূলত, তিনি কেবল পুরানো ওভাররাইট করে নতুন মানগুলির সাথে ব্যবহৃত শেষ বাফারটি ওভাররাইট করে যাচ্ছিলেন, তবে পুরানো মানগুলি ওভাররাইট করা হয়নি এখনও সঞ্চারিত হচ্ছে।
সুতরাং, যদি কোনও মান ডাটা অ্যারের ৮০ পজিশনে থাকে এবং অনুরোধকৃত মানগুলির তালিকাটি ৮০ টিরও কম হয়ে যায় তবে সেই একই মানটি নতুন তালিকায় অন্তর্ভুক্ত থাকে, তবে উভয় মান সেই নির্দিষ্ট বাফারের জন্য ডেটা বাফারে উপস্থিত থাকতে পারে নির্দিষ্ট সময়.
যখন ইউআই মানটির জন্য অনুরোধ করছিল তখন সময় স্লাইসের উপর নির্ভর করে ডাটাবেস থেকে পড়া মানটি।
ফিক্সটি বেদনাদায়ক সহজ ছিল। ডেটা বাফারে আগত আইটেমগুলির সংখ্যা পড়ুন (এটি আসলে প্যাকেট প্রোটোকলের অংশ হিসাবে অন্তর্ভুক্ত ছিল) এবং এই সংখ্যার আইটেমের বাইরে বাফারটি পড়বেন না।
পাঠ শিখেছি:
মঞ্জুর জন্য আধুনিক কম্পিউটিং শক্তি গ্রহণ করবেন না। একটি সময় ছিল যখন কম্পিউটারগুলি ইথারনেট সমর্থন করে না এবং কোনও অ্যারে ফ্লাশ করার সময় ব্যয়বহুল হিসাবে বিবেচিত হতে পারে। আপনি যদি সত্যিই দেখতে চান যে আমরা কতদূর এসেছি, এমন একটি সিস্টেম কল্পনা করুন যা কার্যত কোনও গতিশীল মেমরি বরাদ্দ নেই has IE, কার্যনির্বাহী প্রক্রিয়াটি সমস্ত প্রোগ্রামের জন্য মেমরির সমস্ত প্রাক-বরাদ্দ করতে হয়েছিল যাতে কোনও প্রোগ্রাম সেই সীমা ছাড়িয়ে যেতে পারে না। IE, পুরো সিস্টেমটি পুনরায় সংশোধন না করে কোনও প্রোগ্রামে আরও মেমরি বরাদ্দকরণ একটি বিশাল ক্রাশের কারণ হতে পারে। আমি ভাবছি যদি লোকজন কোনও দিন একই আলোতে আবর্জনা পূর্বের সংগ্রহের দিনগুলি নিয়ে কথা বলবে।
কাস্টম প্রোটোকল (বা সাধারণভাবে বাইনারি ডেটার উপস্থাপনাকে পরিচালনা করে) দিয়ে নেটওয়ার্কিং করার সময় পাইপ জুড়ে পাঠানো প্রতিটি মানের প্রতিটি ক্রিয়াকলাপটি বুঝতে না পারলে আপনি নিশ্চিতটি পড়েন তা নিশ্চিত করুন। আমি বলতে চাইছি যতক্ষণ না আপনার চোখে আঘাত লাগে। লোকেরা পৃথক বিট বা বাইটগুলি হেরফের করে ডেটা পরিচালনা করে তাদের জিনিস করার খুব চালাক এবং দক্ষ পদ্ধতি রয়েছে। অতি ক্ষুদ্রতম বিশদটি অনুপস্থিত থাকলে সিস্টেমটি ভেঙে যেতে পারে।
সামগ্রিকভাবে ঠিক করার সময়টি ছিল 2-3 দিনের সাথে বেশিরভাগ সময় অন্যান্য বিষয়গুলিতে কাজ করতে ব্যর্থ হয়ে যখন আমি এতে হতাশ হয়ে পড়েছিলাম।
সাইডনোট: প্রশ্নযুক্ত হোস্ট কম্পিউটার ডিফল্টরূপে ইথারনেট সমর্থন করে না। এটি চালানোর জন্য কার্ডটি কাস্টম তৈরি এবং পুনঃপ্রমাণিত ছিল এবং প্রোটোকল স্ট্যাকটি কার্যত উপস্থিত ছিল না। আমি যে বিকাশকারীর সাথে কাজ করছিলাম সে একজন প্রোগ্রামারের এক নরক ছিল, তিনি কেবল ইউডিপি এবং একটি মিমিমাল নকল ইথারনেট স্ট্যাক (প্রসেসর পুরো ইথারনেট স্ট্যাক পরিচালনা করতে যথেষ্ট শক্তিশালী ছিলেন না) এই প্রকল্পের জন্য সিস্টেমে প্রয়োগ করেছিলেন তবে তিনি এক সপ্তাহেরও কম সময়ে এটি করেছিলেন। তিনি প্রথমে ওএস ডিজাইন ও প্রোগ্রামিংকারী মূল প্রকল্প দলের অন্যতম নেতা ছিলেন। শুধু বলতে দাও, কম্পিউটার / প্রোগ্রামিং / আর্কিটেকচার সম্পর্কে তাঁর যে কোনও কিছু ভাগ করে নেওয়া উচিত যতক্ষণ না বাত হয়েছিল বা আমি ইতিমধ্যে নতুন কতই না, আমি প্রতিটি শব্দ শুনতে চাই।