জাভা থ্রেড তৈরি করা ব্যয়বহুল কারণ এখানে মোটামুটি কাজ জড়িত রয়েছে:
- থ্রেড স্ট্যাকের জন্য মেমরির একটি বিশাল ব্লক বরাদ্দ করতে হবে এবং আরম্ভ করতে হবে।
- হোস্ট ওএসের সাথে নেটিভ থ্রেড তৈরি / নিবন্ধ করার জন্য সিস্টেম কল করা দরকার।
- বর্ণনাকারীদের জেভিএম-অভ্যন্তরীণ ডেটা স্ট্রাকচারে তৈরি করা, আরম্ভ করা এবং যুক্ত করা দরকার।
এই অর্থে এটি ব্যয়বহুল যে থ্রেড যতক্ষণ বেঁচে থাকে সম্পদের সাথে সংযুক্ত থাকে; উদাহরণস্বরূপ থ্রেড স্ট্যাক, স্ট্যাক থেকে আগত কোনও বস্তু, জেভিএম থ্রেড বর্ণনাকারী, ওএস নেটিভ থ্রেড বর্ণনাকারী।
এই সমস্ত কিছুর ব্যয় প্ল্যাটফর্ম নির্দিষ্ট, তবে আমি যে কোনও জাভা প্ল্যাটফর্মটি পেরিয়ে এসেছি সেগুলিতে এগুলি সস্তা নয়।
একটি গুগল অনুসন্ধান আমাকে একটি পুরানো বেঞ্চমার্ক খুঁজে পেয়েছিল যা ২০০২ ভিনটেজ লিনাক্স চলমান ২০০ টি ভিনটেজ ডুয়াল প্রসেসর শিওনের উপর সান জাভা ১.৪.১ এ প্রতি সেকেন্ডে 000 4000 এর থ্রেড তৈরির হারের প্রতিবেদন করে। আরও একটি আধুনিক প্ল্যাটফর্ম আরও ভাল নম্বর দেবে ... এবং আমি পদ্ধতিটির বিষয়ে মন্তব্য করতে পারি না ... তবে কমপক্ষে এটি ব্যালপার্ক দেয় যাতে থ্রেড তৈরির ব্যয়বহুলতা কতটা ব্যয়বহুল ।
পিটার লরির বেঞ্চমার্কিং ইঙ্গিত দেয় যে আজকের দিনে থ্রেড তৈরির বিষয়টি নিখুঁতভাবে দ্রুত গতিযুক্ত, তবে এটি জাভা এবং / বা ওএস ... বা উচ্চতর প্রসেসরের গতির কারণে কতটা উন্নতি হয়েছে তা স্পষ্ট নয়। তবে আপনি যদি প্রতিবার একটি নতুন থ্রেড তৈরি / শুরু বনাম কোনও থ্রেড পুল ব্যবহার করেন তবে তার সংখ্যা এখনও 150+ গুণমানের উন্নতি নির্দেশ করে। (এবং তিনি বক্তব্য রেখেছিলেন যে এটি সমস্ত আপেক্ষিক ...)
(উপরের অংশে "সবুজ থ্রেড" এর পরিবর্তে "নেটিভ থ্রেডগুলি" ধরে নেওয়া হয়েছে, তবে আধুনিক জেভিএমগুলি পারফরম্যান্সের কারণে সবাই দেশীয় থ্রেড ব্যবহার করে Green সবুজ থ্রেডগুলি সম্ভবত তৈরি করতে সম্ভবত সস্তা, তবে আপনি অন্যান্য ক্ষেত্রে এটির জন্য অর্থ প্রদান করেন))
জাভা থ্রেডের স্ট্যাক কীভাবে বরাদ্দ পেয়েছে তা দেখার জন্য আমি কিছুটা খনন করেছি। লিনাক্সে ওপেনজেডকে 6 এর ক্ষেত্রে, থ্রেড স্ট্যাকটি কল pthread_create
করে দেশীয় থ্রেড তৈরি করে বরাদ্দ করা হয় । (জেভিএম pthread_create
পূর্বনির্ধারিত স্ট্যাকটি পাস করে না ))
তারপরে, pthread_create
স্ট্যাকের মধ্যে নীচে একটি কল দ্বারা বরাদ্দ mmap
করা হয়েছে:
mmap(0, attr.__stacksize,
PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
অনুসারে man mmap
, MAP_ANONYMOUS
পতাকাটি স্মৃতি শূন্যের সূচনা করে দেয়।
সুতরাং, যদিও এটি অপরিহার্য নাও হতে পারে যে নতুন জাভা থ্রেড স্ট্যাকগুলি শূন্য করা হয়েছে (জেভিএম স্পেস অনুসারে), অনুশীলনে (লিনাক্সে কমপক্ষে ওপেনজেডকে 6 দিয়ে) সেগুলি শূন্য করা হয়েছে।