CodeGym /কোর্স /All lectures for BN purposes /জাভা কনকারেন্সি লাইব্রেরি

জাভা কনকারেন্সি লাইব্রেরি

All lectures for BN purposes
লেভেল 1 , পাঠ 1040
বিদ্যমান

জাভাতে মাল্টিথ্রেডিং

জাভা ভার্চুয়াল মেশিন সমান্তরাল কম্পিউটিং সমর্থন করে । সমস্ত গণনা এক বা একাধিক থ্রেডের প্রসঙ্গে সঞ্চালিত হতে পারে। আমরা একাধিক থ্রেডের জন্য একই রিসোর্স বা অবজেক্টে অ্যাক্সেস সেট আপ করতে পারি, সেইসাথে কোডের একক ব্লক চালানোর জন্য একটি থ্রেড সেট আপ করতে পারি।

যেকোন ডেভেলপারকে রিড এবং রাইট অপারেশনের সময় থ্রেডের সাথে কাজ সিঙ্ক্রোনাইজ করতে হবে যে রিসোর্সের জন্য একাধিক থ্রেড বরাদ্দ আছে।

এটি গুরুত্বপূর্ণ যে সংস্থানটি অ্যাক্সেস করার সময় আপনার কাছে আপ-টু-ডেট ডেটা থাকে যাতে অন্য থ্রেড এটি পরিবর্তন করতে পারে এবং আপনি সর্বাধিক আপডেট হওয়া তথ্য পান। এমনকি যদি আমরা একটি ব্যাঙ্ক অ্যাকাউন্টের উদাহরণ নিই, যতক্ষণ না টাকা আসে, আপনি এটি ব্যবহার করতে পারবেন না, তাই সর্বদা আপ-টু-ডেট ডেটা থাকা গুরুত্বপূর্ণ। জাভা থ্রেড সিঙ্ক্রোনাইজ এবং পরিচালনার জন্য বিশেষ ক্লাস আছে।

থ্রেড বস্তু

এটি সমস্ত প্রধান (প্রধান) থ্রেড দিয়ে শুরু হয়, অর্থাৎ, অন্তত আপনার প্রোগ্রামে ইতিমধ্যে একটি চলমান থ্রেড রয়েছে। প্রধান থ্রেড Callable বা Runnable ব্যবহার করে অন্যান্য থ্রেড তৈরি করতে পারে । সৃষ্টি শুধুমাত্র রিটার্ন ফলাফলে ভিন্ন হয়, রানেবল কোনো ফলাফল ফেরত দেয় না এবং চেক করা ব্যতিক্রম ফেলতে পারে না। অতএব, আপনি ফাইলগুলির সাথে দক্ষ কাজ তৈরি করার একটি ভাল সুযোগ পাবেন, তবে এটি খুব বিপজ্জনক এবং আপনাকে সতর্কতা অবলম্বন করতে হবে।

একটি পৃথক CPU কোরে থ্রেড এক্সিকিউশনের সময়সূচী করাও সম্ভব। সিস্টেমটি সহজেই থ্রেডগুলির মধ্যে স্থানান্তরিত হতে পারে এবং সঠিক সেটিংস সহ একটি নির্দিষ্ট থ্রেড কার্যকর করতে পারে: অর্থাৎ, যে থ্রেডটি ডেটা পাঠ করে তা প্রথমে কার্যকর করা হয়, আমাদের কাছে ডেটা পাওয়ার সাথে সাথে আমরা এটিকে বৈধতার জন্য দায়ী থ্রেডে প্রেরণ করি, এর পরে আমরা কিছু ব্যবসায়িক যুক্তি কার্যকর করার জন্য থ্রেডে পাস করি এবং একটি নতুন থ্রেড সেগুলি আবার লিখি। এমন পরিস্থিতিতে, 4টি থ্রেড পালাক্রমে ডেটা প্রক্রিয়া করছে এবং সবকিছু একটি থ্রেডের চেয়ে দ্রুত কাজ করবে। এই জাতীয় প্রতিটি স্ট্রীম একটি নেটিভ OS স্ট্রীমে রূপান্তরিত হয়, তবে এটি কীভাবে রূপান্তরিত হবে তা নির্ভর করে JVM বাস্তবায়নের উপর।

থ্রেড ক্লাসটি থ্রেড তৈরি করতে এবং কাজ করতে ব্যবহৃত হয়। এটিতে স্ট্যান্ডার্ড কন্ট্রোল মেকানিজম রয়েছে, সেইসাথে অ্যাবস্ট্রাক্টগুলি, যেমন java.util.concurrent থেকে ক্লাস এবং সংগ্রহ ।

জাভাতে থ্রেড সিঙ্ক্রোনাইজেশন

বস্তুর অ্যাক্সেস ভাগ করে যোগাযোগ প্রদান করা হয়। এটি খুব কার্যকর, কিন্তু একই সময়ে কাজ করার সময় ভুল করা খুব সহজ। ত্রুটি দুটি ক্ষেত্রে আসে: থ্রেড হস্তক্ষেপ - যখন অন্য থ্রেড আপনার থ্রেডে হস্তক্ষেপ করে এবং মেমরির সামঞ্জস্যতা ত্রুটি - মেমরির সামঞ্জস্য। এই ত্রুটিগুলি সমাধান এবং প্রতিরোধ করার জন্য, আমাদের বিভিন্ন সিঙ্ক্রোনাইজেশন পদ্ধতি রয়েছে।

জাভাতে থ্রেড সিঙ্ক্রোনাইজেশন মনিটর দ্বারা পরিচালিত হয়, এটি একটি উচ্চ-স্তরের প্রক্রিয়া যা একই মনিটর দ্বারা সুরক্ষিত কোডের একটি ব্লক একবারে চালানোর জন্য শুধুমাত্র একটি থ্রেডকে অনুমতি দেয়। মনিটরের আচরণ লকের ক্ষেত্রে বিবেচনা করা হয়; একটি মনিটর - একটি লক।

সিঙ্ক্রোনাইজেশনের বেশ কয়েকটি গুরুত্বপূর্ণ পয়েন্ট রয়েছে যা আপনাকে মনোযোগ দিতে হবে। প্রথম পয়েন্ট হল পারস্পরিক বর্জন - শুধুমাত্র একটি থ্রেড মনিটরের মালিক হতে পারে, এইভাবে মনিটরে সিঙ্ক্রোনাইজেশন বোঝায় যে একবার একটি থ্রেড মনিটর দ্বারা সুরক্ষিত একটি সিঙ্ক্রোনাইজড ব্লকে প্রবেশ করলে, অন্য কোন থ্রেড মনিটর দ্বারা সুরক্ষিত ব্লকে প্রবেশ করতে পারবে না। প্রথম থ্রেড সিঙ্ক্রোনাইজড ব্লক থেকে প্রস্থান করে। অর্থাৎ, একাধিক থ্রেড একই সময়ে একই সিঙ্ক্রোনাইজড ব্লক অ্যাক্সেস করতে পারে না।

কিন্তু সিঙ্ক্রোনাইজেশন শুধুমাত্র পারস্পরিক বর্জন নয়। সিঙ্ক্রোনাইজেশন নিশ্চিত করে যে একটি সিঙ্ক্রোনাইজড ব্লকের আগে বা এর মধ্যে মেমরিতে লেখা ডেটা একই মনিটরে সিঙ্ক্রোনাইজ করা অন্যান্য থ্রেডগুলিতে দৃশ্যমান হয়। ব্লক থেকে প্রস্থান করার পরে, আমরা মনিটরটি ছেড়ে দিই এবং অন্য একটি থ্রেড এটি দখল করতে পারে এবং কোডের এই ব্লকটি কার্যকর করা শুরু করতে পারে।

যখন একটি নতুন থ্রেড মনিটরটি ক্যাপচার করে, আমরা কোডের সেই ব্লকটি চালানোর অ্যাক্সেস এবং ক্ষমতা অর্জন করি এবং সেই সময়ে ভেরিয়েবলগুলি প্রধান মেমরি থেকে লোড করা হবে। তারপর আমরা মনিটরের পূর্ববর্তী প্রকাশের দ্বারা দৃশ্যমান সমস্ত এন্ট্রি দেখতে পারি।

একটি ক্ষেত্রের উপর একটি রিড-রাইট হল একটি পারমাণবিক অপারেশন যদি ক্ষেত্রটিকে উদ্বায়ী ঘোষণা করা হয় বা কোনো রিড-রাইট করার আগে অর্জিত একটি অনন্য লক দ্বারা সুরক্ষিত করা হয়। কিন্তু আপনি যদি এখনও একটি ত্রুটির সম্মুখীন হন, তাহলে আপনি পুনর্বিন্যাস সম্পর্কে একটি ত্রুটি পাবেন (অর্ডার পরিবর্তন করা, পুনরায় সাজানো)। এটি ভুলভাবে সিঙ্ক্রোনাইজ করা মাল্টি-থ্রেডেড প্রোগ্রামগুলিতে নিজেকে প্রকাশ করে, যেখানে একটি থ্রেড অন্যান্য থ্রেড দ্বারা উত্পাদিত প্রভাবগুলি পর্যবেক্ষণ করতে পারে।

পারস্পরিক বর্জন এবং থ্রেডের সিঙ্ক্রোনাইজেশনের প্রভাব, অর্থাৎ, তাদের সঠিক অপারেশন শুধুমাত্র একটি সিঙ্ক্রোনাইজড ব্লক বা পদ্ধতিতে প্রবেশ করে যা পরোক্ষভাবে একটি লক অর্জন করে, বা স্পষ্টভাবে একটি লক প্রাপ্ত করার মাধ্যমে অর্জন করা হয়। আমরা নীচে এটি সম্পর্কে কথা বলতে হবে. কাজ করার উভয় উপায়ই আপনার স্মৃতিকে প্রভাবিত করে এবং উদ্বায়ী ভেরিয়েবলের সাথে কাজ করার কথা ভুলে যাওয়া গুরুত্বপূর্ণ ।

জাভাতে উদ্বায়ী ক্ষেত্র

যদি একটি ভেরিয়েবলকে উদ্বায়ী হিসাবে চিহ্নিত করা হয় তবে এটি বিশ্বব্যাপী উপলব্ধ। এর মানে হল যে যদি একটি থ্রেড একটি উদ্বায়ী ভেরিয়েবল অ্যাক্সেস করে, ক্যাশে থেকে মান ব্যবহার করার আগে এটি তার মান পাবে।

একটি লেখা একটি মনিটর রিলিজের মতো কাজ করে এবং একটি পঠন একটি মনিটর ক্যাপচারের মতো কাজ করে। অ্যাক্সেস "আগে সম্পাদিত" ধরনের একটি সম্পর্ক বাহিত হয়. আপনি যদি এটি বের করেন, থ্রেড A-তে যা দৃশ্যমান হবে যখন এটি একটি উদ্বায়ী ভেরিয়েবল অ্যাক্সেস করবে তা হল থ্রেড B-এর পরিবর্তনশীল। অর্থাৎ, আপনি অন্য থ্রেড থেকে আপনার পরিবর্তনগুলি হারাতে পারবেন না।

উদ্বায়ী ভেরিয়েবলগুলি পারমাণবিক, অর্থাৎ, এই ধরনের একটি ভেরিয়েবল পড়ার সময়, লক পাওয়ার সময় একই প্রভাব ব্যবহার করা হয় - মেমরির ডেটা অবৈধ বা ভুল বলে ঘোষণা করা হয় এবং উদ্বায়ী ভেরিয়েবলের মান আবার মেমরি থেকে পড়া হয় । লেখার সময়, মেমরির উপর প্রভাব ব্যবহার করা হয়, সেইসাথে একটি লক রিলিজ করার সময় - একটি অস্থির ক্ষেত্র মেমরিতে লেখা হয়।

জাভা সমসাময়িক

আপনি যদি একটি অতি-দক্ষ এবং মাল্টি-থ্রেডেড অ্যাপ্লিকেশন তৈরি করতে চান, তাহলে আপনাকে অবশ্যই JavaConcurrent লাইব্রেরি থেকে ক্লাসগুলি ব্যবহার করতে হবে , যা java.util.concurrent প্যাকেজে রয়েছে ।

লাইব্রেরিটি খুবই বিশাল এবং এর বিভিন্ন কার্যকারিতা রয়েছে, তাই আসুন ভিতরে কী আছে তা একবার দেখে নেওয়া যাক এবং এটিকে কয়েকটি মডিউলে ভাগ করা যাক:

জাভা সমসাময়িক

সমসাময়িক সংগ্রহগুলি একটি বহু-থ্রেড পরিবেশে কাজ করার জন্য সংগ্রহের একটি সেট। সম্পূর্ণ সংগ্রহে অ্যাক্সেস ব্লক করার সাথে মৌলিক মোড়ক Collections.synchronizedList-এর পরিবর্তে, ডেটা সেগমেন্টে লক ব্যবহার করা হয় বা সমান্তরালভাবে ডেটা পড়ার জন্য অপেক্ষা-মুক্ত অ্যালগরিদম ব্যবহার করা হয়।

সারি - একটি মাল্টি-থ্রেডেড পরিবেশে কাজ করার জন্য নন-ব্লকিং এবং ব্লকিং সারি। নন-ব্লকিং সারিগুলি থ্রেড ব্লক না করে গতি এবং অপারেশনের উপর ফোকাস করে। আপনাকে যখন প্রযোজক বা ভোক্তা থ্রেডগুলিকে "ধীরগতির" করতে হবে তখন ব্লক করা সারিগুলি কাজের জন্য উপযুক্ত। উদাহরণস্বরূপ, এমন পরিস্থিতিতে যেখানে কিছু শর্ত পূরণ করা হয় না, সারিটি খালি বা পূর্ণ থাকে বা কোনও বিনামূল্যের ভোক্তা নেই ।

সিঙ্ক্রোনাইজার হল থ্রেড সিঙ্ক্রোনাইজ করার জন্য ইউটিলিটি ইউটিলিটি। তারা "সমান্তরাল" কম্পিউটিং একটি শক্তিশালী অস্ত্র.

এক্সিকিউটর হল আরও সুবিধাজনক এবং সহজে থ্রেড পুল তৈরির জন্য একটি কাঠামো, ফলাফল প্রাপ্তির সাথে অ্যাসিঙ্ক্রোনাস কাজের সময়সূচী সেট আপ করা সহজ।

লকগুলি হল অনেক নমনীয় থ্রেড সিঙ্ক্রোনাইজেশন পদ্ধতি যা বেসিক সিঙ্ক্রোনাইজড , অপেক্ষা করুন , নোটিফাই করুন , নোটিফাই করুন

পরমাণু হল এমন ক্লাস যা আদিম এবং রেফারেন্সের উপর পারমাণবিক ক্রিয়াকলাপকে সমর্থন করতে পারে।

মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION