গ্লোবালগুলি তেমন খারাপ নয়। অন্যান্য বেশ কয়েকটি উত্তরে যেমন বলা হয়েছে, তাদের সাথে আসল সমস্যাটি হ'ল আজ, আপনার বিশ্বব্যাপী ফোল্ডার পথটি আগামীকাল, বেশ কয়েকটি বা এমনকি কয়েকশো হতে পারে। আপনি যদি দ্রুত, এক-অফ প্রোগ্রাম লিখছেন তবে গ্লোবালগুলি আরও সহজ হলে ব্যবহার করুন। সাধারণত, যদিও, আপনি কেবলমাত্র আপনার একটি প্রয়োজন বলে মনে করার পরেও বহুগুণের অনুমতি দেওয়া হ'ল উপায়। একটি বৃহত জটিল প্রোগ্রামটির পুনর্গঠন করা আনন্দদায়ক নয় যা হঠাৎ করে দুটি ডাটাবেসের সাথে কথা বলা দরকার ।
তবে এগুলি নির্ভরযোগ্যতার ক্ষতি করে না। আপনার প্রোগ্রামের অনেক স্থান থেকে রেফারেন্সযুক্ত যে কোনও ডেটা অপ্রত্যাশিতভাবে পরিবর্তিত হলে সমস্যা সৃষ্টি করতে পারে। যখন গণনা করা হয় তখন তারা গণনা করছে এমন সংগ্রহগুলি মধ্য-গণিতে পরিবর্তিত হবে। ইভেন্টের সারির ইভেন্টগুলি একে অপরের সাথে কৌশল খেলতে পারে। থ্রেডগুলি সর্বদা সর্বনাশ করতে পারে। স্থানীয় পরিবর্তনশীল বা অপরিবর্তনীয় ক্ষেত্র নয় এমন যে কোনও কিছু সমস্যা is গ্লোবালগুলি এই ধরণের সমস্যা, তবে আপনি অ-বৈশ্বিক করে এটি ঠিক করতে যাচ্ছেন না।
আপনি যদি কোনও ফাইলে লিখতে চলেছেন এবং ফোল্ডারের পাথ পরিবর্তিত হয়, পরিবর্তন এবং লেখার সমন্বয় করা দরকার। (যে হাজার হাজার জিনিসের ভুল হতে পারে তার মধ্যে একটি বলে যে আপনি পথটি দখল করেছেন, তারপরে সেই ডিরেক্টরিটি মুছে ফেলা হবে, তারপরে ফোল্ডারটির পাথটি একটি ভাল ডিরেক্টরিতে পরিবর্তিত হবে, তারপরে আপনি চেষ্টা করে মুছে ফেলা ডিরেক্টরিটিতে লেখবেন)) সমস্যাটি রয়েছে কিনা ফোল্ডার পাথটি বিশ্বব্যাপী বা এক হাজারের মধ্যে একটি যা বর্তমানে প্রোগ্রামটি ব্যবহার করছে।
ক্ষেত্রগুলির সাথে একটি আসল সমস্যা রয়েছে যা একটি সারিতে বিভিন্ন ইভেন্ট, পুনরাবৃত্তির বিভিন্ন স্তর বা বিভিন্ন থ্রেডের মাধ্যমে অ্যাক্সেস করা যেতে পারে। এটিকে সহজ (এবং সরল) করার জন্য: স্থানীয় ভেরিয়েবলগুলি ভাল এবং ক্ষেত্রগুলি খারাপ। তবে প্রাক্তন গ্লোবালগুলি এখনও ক্ষেত্র হতে চলেছে, সুতরাং এটি (তবে সমালোচনামূলকভাবে গুরুত্বপূর্ণ) ইস্যুটি বিশ্বব্যাপী ক্ষেত্রগুলির ভাল বা মন্দ অবস্থানের ক্ষেত্রে প্রযোজ্য নয় ।
সংযোজন: বহুগঠনের সমস্যা:
(মনে রাখবেন যে ইভেন্টের সারি বা পুনরাবৃত্ত কলগুলির সাথে আপনার একই সমস্যা হতে পারে তবে মাল্টিথ্রেডিং সবচেয়ে খারাপ is) নিম্নলিখিত কোডটি বিবেচনা করুন:
if (filePath != null) text = filePath.getName();
যদি filePath
স্থানীয় ভেরিয়েবল বা কোনও ধরণের ধ্রুবক হয় তবে আপনার প্রোগ্রামটি চলমান অবস্থায় ব্যর্থ হবে না কারণ filePath
শূন্য রয়েছে। চেক সবসময় কাজ করে। অন্য কোনও থ্রেড এর মান পরিবর্তন করতে পারে না। অন্যথায় , কোন গ্যারান্টি আছে। যখন আমি জাভাতে মাল্টিথ্রেডেড প্রোগ্রামগুলি লিখতে শুরু করেছি, আমি সর্বদা এই জাতীয় লাইনে নালপয়েন্টারএক্সেপশন পেয়েছি। কোনঅন্যান্য থ্রেড যে কোনও সময় মান পরিবর্তন করতে পারে এবং তারা প্রায়শই করে। অন্যান্য বেশ কয়েকটি উত্তর যেমন উল্লেখ করেছে, এটি পরীক্ষার জন্য গুরুতর সমস্যা তৈরি করে। উপরোক্ত বিবৃতিটি এক বিলিয়ন বার কাজ করতে পারে, এটি ব্যাপক এবং বিস্তৃত পরীক্ষার মাধ্যমে তা পেয়ে যায়, তারপরে উত্পাদনে একবার ফুঁকতে পারে। ব্যবহারকারীরা সমস্যাটি পুনরুত্পাদন করতে সক্ষম হবেন না এবং যতক্ষণ না তারা নিজেরাই বোঝাচ্ছেন যে তারা জিনিসগুলি দেখছেন এবং এটিকে ভুলে গেছেন ততক্ষণ তা আর ঘটবে না।
গ্লোবালগুলিতে অবশ্যই এই সমস্যা রয়েছে এবং আপনি যদি এগুলি সম্পূর্ণরূপে নির্মূল করতে পারেন বা তাদের ধ্রুবক বা স্থানীয় ভেরিয়েবলগুলির সাথে প্রতিস্থাপন করতে পারেন তবে এটি খুব ভাল জিনিস। আপনার যদি ওয়েব সার্ভারে স্টেটলেস কোড চলমান থাকে তবে আপনি সম্ভবত এটি করতে পারেন। সাধারণত, আপনার সমস্ত মাল্টিথ্রেডিং সমস্যা ডাটাবেস দ্বারা গ্রহণ করা যেতে পারে।
তবে যদি আপনার প্রোগ্রামটিতে একজন ব্যবহারকারীর ক্রিয়া থেকে পরের পর্যন্ত জিনিসগুলি মনে রাখতে হয় তবে আপনার চলমান থ্রেডের মাধ্যমে ক্ষেত্রগুলি অ্যাক্সেসযোগ্য হবে। বিশ্বব্যাপী এমন একটি অ-গ্লোবাল ক্ষেত্রে স্যুইচ করা নির্ভরযোগ্যতার সাহায্য করবে না।