בריכות הברגה בהתאמה אישית ב- Java 8 זרמים מקבילים

1. סקירה כללית

ג'אווה 8 הציגה את הרעיון של Sחוטים כדרך יעילה לביצוע פעולות בתפזורת על נתונים. ובמקביל זרמים ניתן להשיג בסביבות התומכות במקביל.

זרמים אלה יכולים להגיע עם ביצועים משופרים - במחיר של תקורה מרובת השחלות.

במדריך מהיר זה, נסתכל על אחת המגבלות הגדולות ביותר של זרם ממשק API וראה כיצד לגרום לזרם מקביל לעבוד עם מנהג ThreadPool למשל, לחלופין - יש ספרייה המטפלת בזה.

2. מקביל זרם

נתחיל בדוגמה פשוטה - לקרוא ל- parallelStream שיטה על כל אחד מה אוסף סוגים - שיחזירו מקבילה אולי זרם:

@Test public void givenList_whenCallingParallelStream_shouldBeParallelStream () {List aList = new ArrayList (); זרם parallelStream = aList.parallelStream (); assertTrue (parallelStream.isParallel ()); }

עיבוד ברירת המחדל המתרחש בתוכנה כזו זרם משתמש ב- ForkJoinPool.commonPool (),א בריכת חוטים משותף לכל היישום.

3. מותאם אישית בריכת חוטים

אנחנו באמת יכולים להעביר מנהג ThreadPool בעת עיבוד זרם.

הדוגמה הבאה יכולה להיות מקבילה זרם השתמש בהתאמה אישית בריכת חוטים לחישוב סכום הערכים הארוכים בין 1 ל -1,000,000, כולל:

@Test ציבורי בטל giveRangeOfLongs_whenSummedInParallel_shouldBeEqualToExpectedTotal () זורק InterruptedException, ExecutionException {long firstNum = 1; lastNum ארוך = 1_000_000; רשימה aList = LongStream.rangeClosed (firstNum, lastNum) .boxed () .collect (Collectors.toList ()); ForkJoinPool customThreadPool = ForkJoinPool חדש (4); long actualTotal = customThreadPool.submit (() -> aList.parallelStream (). להפחית (0L, Long :: sum)). get (); assertEquals ((lastNum + firstNum) * lastNum / 2, actualTotal); }

השתמשנו ב- ForkJoinPool בנאי עם רמת מקבילות של 4. יש צורך בניסויים מסוימים כדי לקבוע את הערך האופטימלי לסביבות שונות, אך כלל אצבע טוב הוא פשוט לבחור את המספר על סמך כמה ליבות יש למעבד שלך.

לאחר מכן, עיבדנו את תוכן ההקבלה זרם, מסכם אותם ב לְהַפחִית שִׂיחָה.

ייתכן שהדוגמה הפשוטה הזו לא מדגימה את התועלת המלאה בשימוש בהתאמה אישית בריכת חוטים, אך היתרונות ניכרים לעין במצבים בהם איננו רוצים לקשור את המשותף בריכת חוטים עם משימות ארוכות טווח (למשל עיבוד נתונים ממקור רשת), או המשותף בריכת חוטים נמצא בשימוש על ידי רכיבים אחרים ביישום.

4. מסקנה

בדקנו בקצרה כיצד להפעיל מקבילה זרם באמצעות מנהג בריכת חוטים. בסביבה הנכונה ועם שימוש נכון ברמת ההקבלה, ניתן להשיג רווחי ביצועים במצבים מסוימים.

את דוגמאות הקוד המלאות המוזכרות במאמר זה ניתן למצוא באתר Github.