Atomic এবং Non-atomic প্রপার্টি অ্যাট্রিবিউটগুলি Objective-C তে ব্যবহৃত হয়, যা একটি প্রপার্টির এ্যাক্সেস এবং ম্যানিপুলেশন নিয়ন্ত্রণ করে। এগুলি সাধারণত থ্রেড সেফটি (Thread Safety) এবং পারফরম্যান্সের মধ্যে একটি ভারসাম্য তৈরি করতে ব্যবহৃত হয়।
1. Atomic Properties
Atomic প্রপার্টি হল এমন একটি প্রপার্টি, যার getter এবং setter মেথড সঠিকভাবে থ্রেড সেফ (Thread-safe) হয়। এর মানে হল যে, যখন একাধিক থ্রেড একই প্রপার্টির মান পরিবর্তন করার চেষ্টা করে, তখন atomic property এটি নিশ্চিত করে যে এক থ্রেড সম্পূর্ণভাবে প্রপার্টির মান পরিবর্তন করার পর অন্য থ্রেড সেটি অ্যাক্সেস করতে পারবে।
Atomic প্রপার্টির প্রধান বৈশিষ্ট্য:
- Thread-Safety: এটি নিশ্চিত করে যে, একাধিক থ্রেড যখন একই প্রপার্টি অ্যাক্সেস বা পরিবর্তন করার চেষ্টা করবে তখন কোনো সমস্যা হবে না।
- Locking:
atomicপ্রপার্টি ডিফল্টভাবে একটি লক ব্যবহার করে, যাতে একথ্রেড সম্পূর্ণভাবে প্রপার্টির কাজ শেষ করার পর অন্যথ্রেড সেই প্রপার্টি অ্যাক্সেস করতে পারে। - Performance:
atomicপ্রপার্টি কিছুটা ধীর হতে পারে, কারণ এটি প্রতিটি অ্যাক্সেসের জন্য লক মেকানিজম ব্যবহার করে।
Atomic প্রপার্টি উদাহরণ:
@interface Car : NSObject
@property (atomic) NSString *model; // Atomic property
@endএখানে, model প্রপার্টি atomic অ্যাট্রিবিউট দ্বারা ডিফাইন করা হয়েছে, যা থ্রেড সেফ করার জন্য getter এবং setter মেথডের মধ্যে লক প্রক্রিয়া ব্যবহার করবে।
Atomic এবং Thread Safety:
যখন একাধিক থ্রেড একই সময় model প্রপার্টির মান পরিবর্তন বা রিট্রিভ করার চেষ্টা করবে, তখন atomic প্রপার্টি নিশ্চিত করবে যে এক থ্রেডের পরিবর্তন সম্পূর্ণ হলে অন্য থ্রেড তার পরিবর্তন করতে পারবে।
2. Non-atomic Properties
Non-atomic প্রপার্টি হলো একটি প্রপার্টি যা thread-safety নিশ্চিত করে না। এটি atomic প্রপার্টির তুলনায় অনেক দ্রুত কাজ করে, কারণ এটি কোনও লকিং প্রক্রিয়া ব্যবহার করে না। তবে, একাধিক থ্রেড যখন এক প্রপার্টি অ্যাক্সেস বা পরিবর্তন করতে চেষ্টা করবে তখন এটি থ্রেড-সেফ নয় এবং তাতে সমস্যা সৃষ্টি হতে পারে।
Non-atomic প্রপার্টির প্রধান বৈশিষ্ট্য:
- Performance:
non-atomicপ্রপার্টি দ্রুত কাজ করে কারণ এতে কোনো লক ব্যবহৃত হয় না। এটি সাধারণত পারফরম্যান্সের জন্য ব্যবহার করা হয়। - No Thread-Safety: একাধিক থ্রেড যখন একই প্রপার্টি পরিবর্তন করতে চেষ্টা করবে, তখন একথ্রেড অন্যথ্রেডের পরিবর্তন উপেক্ষা করতে পারে এবং এতে data corruption হতে পারে।
Non-atomic প্রপার্টি উদাহরণ:
@interface Car : NSObject
@property (nonatomic) NSString *model; // Non-atomic property
@endএখানে, model প্রপার্টি nonatomic অ্যাট্রিবিউট দ্বারা ডিফাইন করা হয়েছে, যার মানে হলো এটি thread-safe নয় এবং লকিং প্রক্রিয়া ব্যবহার করে না, ফলে এটি দ্রুত কাজ করবে কিন্তু একাধিক থ্রেডে একসাথে প্রপার্টি অ্যাক্সেস করা হলে সমস্যা হতে পারে।
3. Atomic vs Non-atomic: পার্থক্য
| বৈশিষ্ট্য | Atomic | Non-atomic |
|---|---|---|
| Thread Safety | হ্যাঁ, এটি থ্রেড সেফ | না, এটি থ্রেড সেফ নয় |
| Performance | কিছুটা ধীর, কারণ লকিং ব্যবহৃত হয় | দ্রুত, লকিং ব্যবহৃত হয় না |
| Use case | থ্রেড সেফটি গুরুত্বপূর্ণ ক্ষেত্রে ব্যবহার করা হয় | একক থ্রেডে ব্যবহৃত বা পারফরম্যান্স গুরুত্বপূর্ণ ক্ষেত্রে |
| Synchronization | atomic গেটার এবং সেটার মেথডে লক ব্যবহার করে | non-atomic গেটার এবং সেটার মেথডে লক ব্যবহৃত হয় না |
4. কখন Atomic এবং Non-atomic ব্যবহার করবেন?
- Atomic প্রপার্টি ব্যবহার করুন যখন আপনার অ্যাপ্লিকেশন থ্রেড-সেফটি এবং ডেটার সঠিকতা নিশ্চিত করতে হবে। উদাহরণস্বরূপ, যখন আপনার অ্যাপ্লিকেশন একাধিক থ্রেডের মাধ্যমে একটি প্রপার্টি রিড এবং রাইট করবে, তখন
atomicপ্রপার্টি ব্যবহার করা উত্তম। - Non-atomic প্রপার্টি ব্যবহার করুন যখন আপনি পারফরম্যান্সের জন্য সর্বোচ্চ গুরুত্ব দেন এবং থ্রেড-সেফটি প্রয়োজনীয় নয়। সাধারণত একক থ্রেডে কাজ করা অ্যাপ্লিকেশন এবং ইউআই সম্পর্কিত প্রপার্টি গুলোর জন্য
non-atomicব্যবহৃত হয়।
5. সারাংশ
- Atomic Properties: থ্রেড সেফ, অর্থাৎ একাধিক থ্রেড যখন একই প্রপার্টি অ্যাক্সেস করতে চেষ্টা করবে, তখন atomic প্রপার্টি ডেটার নিরাপত্তা নিশ্চিত করে। তবে এটি কিছুটা ধীর কাজ করে।
- Non-atomic Properties: পারফরম্যান্সের জন্য দ্রুত, তবে এতে থ্রেড সেফটি নেই এবং একাধিক থ্রেডের অ্যাক্সেসের ক্ষেত্রে ডেটা করাপশন হতে পারে।
আপনার প্রোগ্রামে কখন atomic এবং কখন non-atomic ব্যবহার করবেন তা নির্ভর করবে আপনার অ্যাপ্লিকেশনের প্রয়োজন এবং থ্রেড-সেফটি বা পারফরম্যান্সের গুরুত্বের ওপর।
Read more