MFC (Microsoft Foundation Classes) তে Worker Thread এবং UI Thread দুই ধরনের থ্রেড ব্যবহৃত হয়। প্রতিটি থ্রেডের নিজস্ব কাজ এবং উদ্দেশ্য থাকে, এবং তাদের মধ্যে পার্থক্য বুঝে অ্যাপ্লিকেশন ডিজাইন করা খুবই গুরুত্বপূর্ণ। এখানে UI Thread এবং Worker Thread এর মধ্যে পার্থক্য বিস্তারিতভাবে আলোচনা করা হলো।
UI থ্রেড (UI Thread)
UI Thread হল অ্যাপ্লিকেশনের প্রধান থ্রেড যা User Interface (UI) এর কাজ পরিচালনা করে। এটি অ্যাপ্লিকেশন চালু হওয়ার সময় তৈরি হয় এবং অ্যাপ্লিকেশনের গ্রাফিক্যাল ইউজার ইন্টারফেস (GUI) এর সাথে সম্পর্কিত সমস্ত কাজ সম্পাদন করে। এই থ্রেডটি ব্যবহারকারীর ইনপুট যেমন ক্লিক, কীবোর্ড অ্যাকশন, এবং ড্রয়িং বা রেন্ডারিং কাজ পরিচালনা করে।
UI থ্রেডের বৈশিষ্ট্য:
- Main Thread: অ্যাপ্লিকেশন শুরু হলে এটি প্রধান থ্রেড হিসাবে কাজ করে।
- Event Handling: UI থ্রেড ব্যবহারকারী থেকে ইভেন্ট গ্রহণ করে, যেমন বাটন ক্লিক, মাউস মুভমেন্ট, কীবোর্ড ইভেন্ট ইত্যাদি।
- Message Loop: UI থ্রেড একটি মেসেজ লুপ (Message Loop) পরিচালনা করে, যা সমস্ত ইভেন্ট বা মেসেজ গ্রহণ এবং প্রক্রিয়া করে।
- UI Updates: UI থ্রেডের মাধ্যমে ফর্ম, ডায়ালগ, কন্ট্রোল ইত্যাদি আপডেট করা হয়।
Code Example (UI Thread Message Loop):
int CMyApp::Run()
{
// Event loop starts here
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
}
এই মেসেজ লুপ UI থ্রেডে রান হয় এবং অ্যাপ্লিকেশন ইউজার ইন্টারফেস পরিচালনা করে।
Worker থ্রেড (Worker Thread)
Worker Thread হল এমন একটি থ্রেড যা ব্যাকগ্রাউন্ডে কাজ করে এবং UI থ্রেডকে অবরুদ্ধ না করে দীর্ঘ সময় ধরে চলা কাজগুলো সম্পাদন করে। যেমন, ডেটা প্রসেসিং, ফাইল রিডিং, নেটওয়ার্ক রিকোয়েস্ট পাঠানো, বা বড় আকারের গণনা ইত্যাদি। যখন কাজের জন্য সময় লাগবে এমন অপারেশন করতে হবে, তখন Worker Thread ব্যবহার করা হয় যাতে UI থ্রেড ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করতে পারে এবং অ্যাপ্লিকেশন ফ্রিজ না হয়।
Worker থ্রেডের বৈশিষ্ট্য:
- Background Tasks: ইউজারের ইন্টারফেসকে অবরুদ্ধ না করে দীর্ঘ সময়ের কাজগুলো সম্পাদন করে।
- Concurrency: UI থ্রেডের পাশাপাশি একই সময়ে একাধিক কাজ করতে সক্ষম হয়।
- Asynchronous Execution: ব্যাকগ্রাউন্ড কাজ সম্পন্ন হলে UI থ্রেডের সাথে যোগাযোগ করে ফলাফল প্রদান করতে পারে (সাধারণত মেসেজ বা সিগন্যালের মাধ্যমে)।
Code Example (Creating a Worker Thread):
UINT MyWorkerThread(LPVOID pParam)
{
// Worker thread logic here
// For example: file processing, data fetching, etc.
return 0;
}
// Create a worker thread
AfxBeginThread(MyWorkerThread, NULL);
এখানে, AfxBeginThread ফাংশন ব্যবহার করে একটি Worker Thread তৈরি করা হয়েছে।
UI Thread এবং Worker Thread এর মধ্যে পার্থক্য
| বিষয় | UI Thread | Worker Thread |
|---|---|---|
| মূল কাজ | ইউজার ইন্টারফেস (GUI) এর কাজ পরিচালনা করা | ব্যাকগ্রাউন্ড কাজ যেমন ডেটা প্রসেসিং, ফাইল অপারেশন |
| ইভেন্ট প্রসেসিং | ইভেন্ট এবং মেসেজ প্রসেস করা | ইভেন্ট বা মেসেজ প্রসেসিং করে না |
| থ্রেড টাইপ | প্রধান থ্রেড | ব্যাকগ্রাউন্ড থ্রেড |
| ধীর্ঘস্থায়ী অপারেশন | দীর্ঘস্থায়ী অপারেশন করার সময় UI থ্রেড ব্লক হয়ে যেতে পারে | দীর্ঘস্থায়ী অপারেশন সম্পাদন করার সময় UI থ্রেড ব্লক হয় না |
| ব্যবহার | UI অপারেশন, ইন্টারফেস রেন্ডারিং, মেসেজ লুপ | ডেটা প্রসেসিং, ফাইল হ্যান্ডলিং, নেটওয়ার্ক রিকোয়েস্ট |
| থ্রেড পুল | সাধারণত একটাই UI থ্রেড থাকে | একাধিক Worker Thread থাকতে পারে |
| UI-র সাথে যোগাযোগ | UI আপডেট করতে পারে | UI থ্রেডের সাথে যোগাযোগ মেসেজ বা সিগন্যালের মাধ্যমে |
সারাংশ
UI Thread অ্যাপ্লিকেশনের প্রধান থ্রেড, যা গ্রাফিক্যাল ইউজার ইন্টারফেস এবং ইউজারের ইন্টারঅ্যাকশনের জন্য দায়ী। এটি মেসেজ লুপের মাধ্যমে ইভেন্ট প্রসেস করে এবং অ্যাপ্লিকেশনকে ইন্টারঅ্যাকটিভ রাখে। অন্যদিকে, Worker Thread ব্যাকগ্রাউন্ডে কাজ করে এবং সময়সাপেক্ষ অপারেশনগুলো সম্পাদন করে, যাতে UI থ্রেড অবরুদ্ধ না হয় এবং ইউজার ইন্টারফেস স্নিগ্ধ থাকে। UI থ্রেড এবং Worker Thread এর মধ্যে সঠিক সমন্বয় অ্যাপ্লিকেশনের কর্মক্ষমতা এবং ব্যবহারকারীর অভিজ্ঞতাকে উন্নত করতে সাহায্য করে।
Read more