کیمیائی &؛ مواد انجینئری
جب مُفتٹمنٹن انجینئری اطلاقات میں تنہاٹونز کی کارکردگی سے گریز کریں
Table of Contents
Introduction: Multi-Thed Engineering اطلاقیہ میں اکلوتےٹون کی شمولیت
تنہائی کا نمونہ سافٹ وئیر انجینئری میں سب سے زیادہ استعمال ہونے والا مصنوعی ڈیزائن کے نمونے میں سے ایک ہے. یہ یقین کرتا ہے کہ کلاس صرف ایک ہی مثال رکھتا ہے اور اس مثال تک رسائی حاصل کرتا ہے.
اس مضمون میں سب سے زیادہ عام غلطیوں کا جائزہ لیا گیا ہے جو کثرت سے ماحول میں تنہا موجود یونٹوں کی تشکیل پر عمل پیرا ہوتے ہیں، بنیادی وجوہات کی وضاحت کرتے ہوئے، اور ان سے بچنے کے لیے بہترین عوامل اور نمونے کا ایک جامع سیٹ فراہم کیا جاتا ہے. اس میں جاوا میں عملی کوڈ مثالیں بھی شامل ہیں، سی++ اور سی# مزید پڑھنے کے لیے بیرونی وسائل کی سفارش بھی کی گئی ہے۔
تنہائی میں ہونے والے واقعات
جب ایک شخص اپنے اندر تبدیلیاں لاتا ہے تو اُسے اُس کی غلطیوں کی وجہ جاننے کی ضرورت ہوتی ہے ۔
1۔ تعمیر کنندہ ذاتی نہیں بنانا
کسی بھی یونٹ کی بنیاد ایک نجی ترکیب ہے جو بیرونی فوری عمل کو روکتا ہے۔ اگر بنانے والا پبلک، محفوظ یا پیکج-کلر کی سہولت ہو تو کوئی بھی سوراخ نئی صورت بنا سکتا ہے، انتہائی حد تک الٹ سکتا ہے.
۲ : ۲ میں درج ہدایت پر عمل کرنے سے ہم اپنی صحت پر حد سے زیادہ توجہ نہیں دے سکتے ۔
یک طرفہ ماحول میں ایک سادہ سا سستا ابتدائی عملہ فنی کام کرتا ہے:
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
لیکن متعدد استعمال شدہ اطلاق میں دو یا اس سے زیادہ سوراخ داخل کر سکتے ہیں کسی بھی سوراخ سے پہلے چیک کر سکتے ہیں. ہر سوراخ اپنے آپ کو بنانے کے لئے کام کرتا ہے،
3۔ موزوں طور پر Synchronization کے بغیر لازی ریزیشن استعمال کرنا۔
مثال کے طور پر ، تمام طریقہ کار کو عمل میں لانا مگر ایک نمائش کی بوتل متعارف کرانا :
public static synchronized Singleton getInstance() { ... }
کول حاصل کرنے اور آزاد کرنے کے بعد بھی، اس نمونے کو بنانے کے بعد بھی، اعلیٰ پیمانے پر یہ سخت ذلیل و رسوا کر سکتا ہے. بہتر رسائی استعمال کرنا ہے، مگر یہ نمونہ درست نہیں ہے۔
۴ : زیادہ سے زیادہ استعمال کرنے والی چیز
Synchronization بہت سے شکلوں میں آتا ہے : طریقوں، ، بلاکس، ، ، ، ، اور اور پھر سے. زیادہ سے زیادہ سنچریاں جب اچھا کنٹرول حاصل ہوتا ہے.
5۔ [volatile کلیدی لفظ ہے۔
[1] زبانوں میں بنیادی لفظ [ یا ⁇ ] [FLT] [1] [fLT]، ، [1]]. [volatile]] بہت سی ہدایات کے لئے ضروری ہے.
Thread-Safe Oneunton Inplyment کے لیے بہترین مشقیں
ان خطرات سے بچنے کیلئے ، ان ثبوتوں پر عمل کریں ۔
ذاتی تعمیراتی کام اور اسکے بعد
اگر آپ کو کسی بھی طرح سے کام کرنا پڑتا ہے تو آپ کو یہ دیکھنا چاہئے کہ آپ کے پاس کیا ہے ۔
Synchroned block صرف کب استعمال کریں گے
سستے ابتدائی بنانے کے لیے ڈبل کیچ کی طرح کیلکتہ (clading) کی صورت میں کمی واقع ہوتی ہے:
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
Singleton result = instance; // Local variable for performance
if (result == null) {
synchronized (Singleton.class) {
result = instance;
if (result == null) {
instance = result = new Singleton();
}
}
}
return result;
}
}
اس کوڈ میں ، جانچ باہر جب تک مثالی موجود نہ ہو جائے، اس وقت تک لاک کے اندر موجود نہ رہ جائے۔ اندرونی چیکس یقین کر لیتا ہے کہ صرف ایک پارہ تخلیقی عمل کو تشکیل دیتا ہے.
غیر متصل
اگر یکٹن ہمیشہ ضرورت مند ہو اور تخلیق سستا ہو تو شوق ابتدائییت کا سادہ ترین طریقہ ہے۔
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
کلاس لوڈ کرنا عمومًا جے وی ایم سے جڑا ہوتا ہے، لہذا اضافی اضافی تفاعل کی ضرورت نہیں ہوتی، تاہم، اس سے نمودار ہوتی ہے کلاس لوڈ وقت پر، جو وسائل کی ترسیل کے نظام میں غیر فعال ہو سکتا ہے یا جب واحدٹن ایسے رن پر منحصر ہوتا ہے جو ابھی دستیاب نہیں ہے۔
Static holler settlement (Initialization-on-demand)
یہ انداز سست ابتدائی ابتدائی طور پر بغیر واضح طور پر محفوظ شدہ (sunction) کے ساتھ مل جاتا ہے:
public class Singleton {
private Singleton() {}
private static class Holder {
static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return Holder.INSTANCE;
}
}
[[FLT:CLT] کلاس صرف اس وقت لوڈ کی جاتی ہے جب پہلے بلایا جاتا ہے اور جے وی ایم کو کلاس لوڈنگ کے دوران میں موجود sperming کے میدان کی محفوظ اشاعت کی ضمانت دیتا ہے. یہ بہت زیادہ تر جاواٹونز کے لیے قابلِ یقین حل سمجھا جاتا ہے۔
انوم-بسد تنہاٹن (Java)
یوشو بلچ کی [Efectivet جاوا ایک انیم استعمال کرنے کی سفارش کرتا ہے:
public enum Singleton {
INSTANCE;
// methods and fields
}
انو ایم مسلسل ہیں اور جاوا زبان میں یہ ضمانت ہے کہ انتہائی واقعات کو صرف ایک بار بنایا جائے، حتی کہ زیرِ غور یا زیرِ غور حملوں بھی یہ دونوں سوراخوں کے محفوظ اور غیر محفوظ ہیں. تاہم، انیمس کلاسز کو توسیع نہیں دے سکتے (بلکہ عملی طور پر)، اس لیے یہ تمام معاملات کے لیے موزوں نہیں ہیں۔
سی++ اور سی# میں ایکشن کنٹرولز
سی++ میں Meyer's ununton (Local special reduction) سی++11 سے لیکر ser-ser-reat-sect-seclation –
Singleton& getInstance() {
static Singleton instance;
return instance;
}
سی# میں کلاس ایک تعمیر شدہ سرنگ خالی ابتدائییت فراہم کرتی ہے:
public class Singleton {
private static readonly Lazy<Singleton> _lazy =
new Lazy<Singleton>(() => new Singleton());
public static Singleton Instance => _lazy.Value;
}
انجینئری اطلاقیات میں جانچ اور تجزیہ
انجینئری اطلاقات میں، واحدن کا انداز اکثر ہارڈ ویئر ڈرائیور، سکیف ترتیبات، دھاگے پول یا ڈرافٹ سروسز جیسے مشترکہ وسائل کا انتظام کرتا ہے۔ متعدد ٹیسٹوں میں ایسے واحد یونٹوں کا امتحان احتیاط کے ساتھ کرنے کی ضرورت ہوتی ہے، مندرجہ ذیل پر غور کریں:
- واحدٹونز ٹیسٹنگ[1] کو دوبارہ ترتیب دینے کے لیے ایک طریقہ (مثلاً، ایک محفوظ طریقہ کار کو صرف امتحانات میں استعمال کیا جاتا ہے) یا ایک منفرد طریقہ کے ذریعے ہی استعمال کیا جاتا ہے. بہت سے جدید اطلاقات واحدٹونوں کو مکمل طور پر ایسے انفنٹری فریم ورکز میں تبدیل کرنے سے گریز کریں جو زندگی کی معیشت کو منظم کرتے ہیں۔
- Futance Profiling حقیقی وقت یا ہائی رائز سے نظام میں : کمیت کی پیمائش۔ بعض صورتوں میں ایک خالی غیر ثابت شدہ واحدون یا [C+] کے استعمال میں۔
- ] Distributed system کو یکم منٹ کا ہونا ضروری ہے کہ وہ ایک مخصوص عمل ہو، پورے عملے میں نہ کہ اگر آپ کو ایک کلوگرام کی یکٹن کی ضرورت ہو تو بیرونی بلے باز (مثلاً ایک ڈیٹا بیس، ڈیسیڈیڈ، ایمووووسٹر یا لیڈر انتخاب) استعمال کریں۔
- Reflection and Sarialization جاوا سیریل میں استعمال کا استعمال، اور مصنوعی مواد میں ایک سوائے اتارنے سے بچنے کے، اگر پہلے ہی سے طے شدہ ہے۔
کُنَّا
تنہا طرزِ نقشِ کار سافٹ ویئر انجینئر کے ٹول باکس میں ایک قیمتی ذریعہ رہتا ہے، مگر اس کا عمل کئی ضمنی ماحول میں تفصیل پر توجہ مرکوز کرنے کے لیے ضروری ہے.
مزید مطالعہ کے لیے مندرجہ ذیل وسائل سے رجوع کریں:
- ویکیپیڈیا: Untton Construction
- Oracle Java Untton Tutorial
- [حوالہ درکار] "ڈبل-چبل کولکاتا" ڈاکیشن۔
- میکرو جی ایم ٹی ایم ڈی بی پر محیط
جب شک ہو تو ابتدائی یا وفاقی سطح پر ترقی کرنے والے نمونے کو ترجیح دیتے ہیں اور ہمیشہ بحث کے تحت درستی کے لیے امتحانات لکھتے ہیں۔