Concurrency মধ্যম

ভার্চুয়াল থ্রেড ব্যবহার করে কনকারেন্ট HTTP রিকোয়েস্ট

ভার্চুয়াল থ্রেড এবং HttpClient ব্যবহার করে একসাথে একাধিক ইউআরএল (URL) থেকে ডেটা ফেচ (fetch) করুন।

✕ Java 8
ExecutorService pool =
    Executors.newFixedThreadPool(10);
List<Future<String>> futures =
    urls.stream()
    .map(u -> pool.submit(
        () -> fetchUrl(u)))
    .toList();
// manual shutdown, blocking get()
✓ Java 21+
try (var exec = Executors
    .newVirtualThreadPerTaskExecutor()) {
    var results = urls.stream()
        .map(u -> exec.submit(
            () -> client.send(req(u),
                ofString()).body()))
        .toList().stream()
        .map(Future::join).toList();
}
এই কোডে সমস্যা দেখছেন? আমাদের জানান।
♾️

প্রতি রিকোয়েস্টের জন্য থ্রেড

কোনো থ্রেড পুল সাইজিংয়ের প্রয়োজন নেই – প্রতিটি ইউআরএল-এর জন্য একটি ভার্চুয়াল থ্রেড।

📖

সহজ কোড

সরাসরি ব্লকিং কোড লিখুন।

হাই থ্রুপুট (High Throughput)

ন্যূনতম রিসোর্স ব্যবহার করে হাজার হাজার কনকারেন্ট রিকোয়েস্ট (concurrent requests) হ্যান্ডেল করা যায়।

পুরনো পদ্ধতি
থ্রেড পুল + URL কানেকশন (URLConnection)
আধুনিক পদ্ধতি
ভার্চুয়াল থ্রেড + HttpClient
JDK থেকে
21
কঠিনতা
মধ্যম
ভার্চুয়াল থ্রেড ব্যবহার করে কনকারেন্ট HTTP রিকোয়েস্ট
উপলব্ধ

JDK 21 LTS (সেপ্টেম্বর 2023) থেকে ব্যাপকভাবে উপলব্ধ

ভার্চুয়াল থ্রেড প্রতিটি HTTP রিকোয়েস্টের জন্য একটি করে থ্রেড তৈরি করাকে বাস্তবসম্মত করে তোলে। HttpClient-এর সাথে এর সমন্বয়ে, এটি জটিল অ্যাসিঙ্ক কলব্যাক প্যাটার্নগুলোকে সহজ ব্লকিং কোড দিয়ে প্রতিস্থাপন করে, যা সহজেই স্কেল করা যায়।