Java Academy · पाठ

पैरेलल स्ट्रीम बनाना

parallel() और parallelStream()

पाठ 1, कुल 4 में से13 चरण

पैरेलल स्ट्रीम बनाना, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

समानांतर stream क्या करते हैं

एक parallel stream अपने डेटा को बाँटकर कई थ्रेड पर खंडों को संसाधित करता है और फिर परिणामों को मिलाता है। इसका लक्ष्य बड़े कार्यभार पर अधिक तेज़ प्रसंस्करण दर प्राप्त करना है।

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        int sum = IntStream.rangeClosed(1, 1000)
            .parallel()
            .sum();
        System.out.println(sum);
    }
}

मौजूदा stream पर parallel()

parallel() कॉल करने पर क्रमिक stream समानांतर stream में बदल जाता है। यह प्रसंस्करण-श्रृंखला में कहीं भी दिखाई दे सकता है।

import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> nums = List.of(1, 2, 3, 4, 5);
        int total = nums.stream()
            .parallel()
            .mapToInt(Integer::intValue)
            .sum();
        System.out.println(total);
    }
}

संग्रहों पर parallelStream()

Collection.parallelStream() सीधे समानांतर stream बनाता है; यह stream().parallel() का संक्षिप्त विकल्प है।

import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> words = List.of("a", "bb", "ccc");
        int chars = words.parallelStream()
            .mapToInt(String::length)
            .sum();
        System.out.println(chars);
    }
}

क्रमिक निष्पादन पर वापस

sequential() stream को एकल-थ्रेडीय निष्पादन पर वापस ले आता है। पूरी प्रसंस्करण-श्रृंखला के लिए parallel() या sequential() में से सबसे अंत में की गई कॉल प्रभावी होती है।

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        int sum = IntStream.rangeClosed(1, 100)
            .parallel()
            .sequential()
            .sum();
        System.out.println(sum);
    }
}

isParallel की जाँच

isParallel() बताता है कि stream समानांतर रूप से चलेगा या नहीं।

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        System.out.println(IntStream.range(0, 10).isParallel());
        System.out.println(IntStream.range(0, 10).parallel().isParallel());
    }
}

परिणाम समान, निष्पादन अलग

योग जैसी साहचर्यात्मक क्रियाओं के लिए parallel और sequential stream समान परिणाम लौटाते हैं। केवल निष्पादन रणनीति अलग होती है।

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        int seq = IntStream.rangeClosed(1, 50).sum();
        int par = IntStream.rangeClosed(1, 50).parallel().sum();
        System.out.println(seq == par);
    }
}

साझा ForkJoinPool

समानांतर stream साझा ForkJoinPool.commonPool() का उपयोग करते हैं। इसका डिफ़ॉल्ट आकार उपलब्ध प्रोसेसरों की संख्या से एक कम होता है।

public class Main {
    public static void main(String[] args) {
        System.out.println(Runtime.getRuntime().availableProcessors());
    }
}

थ्रेड का क्रम निश्चित नहीं होता

forEach के साथ, समानांतर stream किसी भी क्रम में प्रिंट कर सकते हैं, क्योंकि खंड अलग-अलग समय पर पूरे होते हैं। यदि क्रम महत्वपूर्ण हो, तो forEachOrdered का उपयोग करें।

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        IntStream.rangeClosed(1, 5)
            .parallel()
            .forEachOrdered(System.out::println);
    }
}

रिडक्शन आंशिक परिणामों को मिलाता है

पर्दे के पीछे, समानांतर रिडक्शन हर खंड के लिए आंशिक परिणाम निकालता है और उन्हें संयोजक की सहायता से मिलाता है। सही परिणाम के लिए क्रिया साहचर्यात्मक होनी चाहिए।

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        int product = IntStream.rangeClosed(1, 6)
            .parallel()
            .reduce(1, (a, b) -> a * b);
        System.out.println(product);
    }
}

समानांतर रूप से संग्रह करना

संग्रहक ढाँचा आंशिक कंटेनरों को मिलाकर समानांतर संग्रह का समर्थन करता है। groupingBy समानांतर रूप से सही ढंग से काम करता है।

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<String> words = List.of("apple", "banana", "avocado", "cherry");
        Map<Character, List<String>> byFirst = words.parallelStream()
            .collect(Collectors.groupingBy(w -> w.charAt(0)));
        System.out.println(byFirst);
    }
}

हर stream तेज़ नहीं होता

समानांतरता चालू करना आसान है, लेकिन यह हमेशा लाभदायक नहीं होता। छोटे डेटा-समुच्चय या हल्की क्रियाएँ बाँटने और मिलाने की अतिरिक्त लागत के कारण parallel में धीमी हो सकती हैं।

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        long count = IntStream.rangeClosed(1, 10)
            .parallel()
            .filter(n -> n % 2 == 0)
            .count();
        System.out.println(count);
    }
}

त्वरित जाँच

डिफ़ॉल्ट रूप से समानांतर stream को कौन-सा थ्रेड पूल चलाता है?

पुनरावलोकन

आपने समानांतर stream बनाए:

  • parallel() किसी भी stream को बदलता है; parallelStream() संग्रह का संक्षिप्त विकल्प है।
  • sequential() stream को वापस लाता है; सबसे अंत में की गई कॉल प्रभावी होती है।
  • वे साझा ForkJoinPool.commonPool() पर चलते हैं।
  • साहचर्यात्मक क्रियाओं के लिए परिणाम sequential के समान होते हैं, लेकिन क्रम और गति निश्चित नहीं होते।
शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
104
पाठ
374

अक्सर पूछे जाने वाले प्रश्न

क्या “पैरेलल स्ट्रीम बनाना” पाठ निःशुल्क है?

हाँ—“पैरेलल स्ट्रीम बनाना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“पैरेलल स्ट्रीम बनाना” में मैं क्या सीखूँगा?

parallel() और parallelStream() आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“पैरेलल स्ट्रीम बनाना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. पैरेलल स्ट्रीम बनाना
  2. पैरेललिज़्म कब उपयोगी है
  3. थ्रेड सुरक्षा और साइड इफ़ेक्ट
  4. सामान्य समस्याएँ
← Java Academy पर वापस जाएँ