35
םםםםםThreads - םםםםםם םםםםם םםם םםםםם םםם םםםםם ם"ם םםםם םםםםםםם םםםםםםם םםםםMulti Programming . - םם םםםם םםםםם םםםם םםםםם םםם:1 . םםםםם

math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

  • Upload
    lehanh

  • View
    229

  • Download
    4

Embed Size (px)

Citation preview

Page 1: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

Threadsחוטים

טכניקת תכנות שבו- יישום אחד ממומש ע"י

מספר תוכניות Multiעצמאיות נקרא

Programming. יש מספר סיבות-

לממש יישום ככה:מידור.1 לפעמים נוח לתכנת.2

ככה )סוג של שבירתהמטלה(.

Page 2: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

היום גם יכול להיות.3 שפעולות מסוימות

יתבצעו במקביל הודות לליבות כפולות וריבוי

מעבדים. לפעמים )בתכנות.4

מדעי( ניתן להפעיל מספר גישות לפתרון

לבעיה קשה.

Page 3: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

לפעמים יישום.5 מבצע מספר גדול של פעולות קטנות

ולפעמים נוח לתכנת את הפעולות הללו

כתוכניות עצמאיות.

בעיקרו של דבר של דבר,multi-programmingניתן

אפשרויות:2לממש ע"י .processריבוי תהליכים

.threadsריבוי חוטים

Page 4: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

תהליך הוא אמצעי של הרצת תוכניות עצמאיותברמת מערכת ההפעלה.

Threadהוא אמצעי שבו תהליך בודד של מערכת ההפעלה מתחלק לתתי

תוכניות עצמאיות. –ים באThreadממימוש

בשני רמות:-System Thread–

התמיכה בריבוי תוכניות נתמך ברמת

מערכת ההפעלה.

Page 5: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

-User End Threads– הניהול של תתי התוכניות נעשה

ביישום עצמו בדרך כלל בסיוע מערכת

ההפעלה בכל הקשורלמדידות זמן וכו'.

-Threadשאלה: למה יש ים?

Page 6: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

אנחנו היום עובדים במערכות הפעלה

מוגנות, שבין השאר מגינות על תהליכים זה

מזה. למה לא לעבוד ברמת

התהליכים? תשובה: תהליכים הם משאב של המערכת, הכמות עשויה להיות

מוגבלת,

Page 7: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

המידור בין תהליכים הוא גבוה, ותקשורת בין

תהליכים הוא דבר יקר. תהליך הוא משאב יחסית

.CPUיקר בזמן -ים נחשבThreadמערכת

בעיני המערכת לתהליך ביןאין מידור, ולכן אחד

מרחב-ים: Threadה- הכתובות של כולם

.משותף

Page 8: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

השדותJavaלדוגמא, ב- הסטטיים של התוכנית

.Threadמשותפים לכל ה- מחייבתThreadיצירת

פחות פעולות מיצירתתהליך.

לפעמים יש פחות הגבלות על יצירת

Thread.ים- יצירת תהליך הוא מהלך

די תלוי במערכתההפעלה.

Page 9: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

-ים ב-Threadתמיכה ב-Javaמאפשר מימוש קוד

בלי תלוי במערכתההפעלה.

Threadהעברת מידע בין –ים הוא דרך שטחי

זיכרון מה שיוותר מורכבזה הסנכרון ביניהם.

:Threadמהלך חייו של newנולד במצב -

Page 10: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

startכאשר עושים - )רוצהrunnableעובר ל-

לרוץ(אחרי שעובר ל--

runnable Threadעשוי לעבור

wait. למצב המתנה 1ביוזמתו לזמן לא מוגבל

למצב המתנה.2 ביוזמתו לזמן מוגבל

timed wait

Page 11: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

למצב חסימה אם.3 ניסה לגשת למשאב

blockedנעול למצב סיום.4

Terminated.

Page 12: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

http://math.haifa.ac.il/ronn/realtime/docs/

הקבצים הרלוונטיים הםPart7.doc

Part7c.docעד Threadדרך פשוטה יחסית ליצירת

שמספיקה לתרגיל הבית הואכלהלן:

"תוכניתJavaבכדי ליצור ב- עצמאית" הוא צריך להיות יורש

של מחלקה מסוימות או ממשקים מסוימים, הכי פשוט להגדיר אותו

יורש של המחלקה המובניתThread.השורה

Page 13: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

class Pthread1 extends Thread

יכולPthread1גורם לכך מופע של למעשה תוכניתThreadלהיות

עצמאית.זה אומר שאם אני אעשה משהו כמו

Pthread1 p1 = new Pthread().

p1.start();

אני מריץ את התוכנית העצמאית. של מחלקה שהיאמופעהקצאת

לא גורמת לו לרוץ.Threadיורשת של מבצעיםהמופעהוא רץ כאשר על

היא מתחילה לרוץ.startמתודה

Java ב-Thread של ה- הקוד הביצועי.run() voidהוא המתודה

Page 14: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

סיכום: לעשותאפשר Threadיצירת

ע"י: הגדרת מחלקה חדשה.1

.Threadכמחלקת בן של הגדרת הקוד הביצועי של.2

ע"י מימוש מתודהThreadה-public void run()

Page 15: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

בתוכנית הראשית להקצות.3 מופע של המחלקה ולבצע

)(.startעל המופע

-ים הואThreadיישום מרובה בעייתי מכמה סיבות.

אחד מהם הוא הצורך בסנכרון.http://math.haifa.ac.il/ronn/java/wordfiles/

http://math.haifa.ac.il/ronn/realtime/docs/

Page 16: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

–יםThreadאפשרויות ליצירת :1שיטה

המינימום הוא לממש מחלקה- שמממשת את הממשק המובנה בשפה

Runnable. לספקrunחייבים לדרוס את המתודה -

תוכנית ביצועית.

:2שיטה

Executerלהגדיר מחלקה שמממשת את - threadיעיל יחסת כאשר מקצים הרבה -

–ים לפעולות קטנות. בשיטה הזו נשמרים המשאבים של-

thread.שסיים להקצאה חדשה בהמשך מאפשר מימוש מה שנקרא מאגר-

thread ים– thread pool.

Page 17: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

-ים, ע"י פקודה threadמקצים מאגר של -ExecuteService משתנה = Exceutors.newCachedThreadPool();

-ים עדיין כמו קודם,threadהקוד של ה--Runnableמיישמים של

newעדיין מקצים את המופעים ע"י - execute-ים ע"י threadמפעלים את ה--

-ים.thread( של מאגר ה-start)במקום

(מצביע לחוט)execute.משתנה

במקום

;()start.מצביע לחוט

-ים, הקוד של ה-threadבתוכנית מרובת -main-נחשב בעצמו ל thread.

Page 18: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

-Threadהעברת מידע בין ים היא עניין פשוט ע"י

שימוש או במשתנים סטטיים,- הקצאה דינמית של-

שטח המשמש-Threadלתקשורת בין

ים והעברת כתובת

Page 19: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

-Threadהשטח לידי ה-ים המעורבים.

עדיין יש בעיה של סנכרון-ים.Threadאו תאום

מה זה סנכרון? לפעמים צריך לדאוג שתוכניות עצמאיות שמשתפות פעולה

יתבצעו בסדר מסוים.

Page 20: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

לפעמים חלק מה-Threadים לא יכולים-

להמשיך )אין להם מהלעשות( עד שאחד ה-

Threadים יעשה פעולה– מסוימת.

דוגמא מיוחדת של מניעההרעיון הזה הוא

.Mutual Exclusion הדדיתמניעה הדדית פירושו ש-

Threadניגש למשאב משותף רק כאשר הוא

אולפני שינוי קרי: תקין

Page 21: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

לאחר השלמתלחלוטין שינוי.

הבעיה נובעת מכך ,מכסות זמןשבמסגרת

Thread בכללהיעצר יכול נקודה בכל רגע. מקור הבעיה היא

תוך כדיthreadבעצירת שינוי משאב גלובלי.

פתרון אפשרי הוא מנגנון:נעילות

thread משאבנועל משותף לפני השינוי, וכל

Page 22: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

thread לגשת המנסה .נעצרלמשאב הנעול –

הנועלthreadכאשר ה- את המשאב,משחרר מבין הממתיניםהראשון

משתחרר וחוזר חלילה. מנגנון נעילות הוא מנגנון רצוני שאינו מונע עצירה

באמצע. threadשל אפשר לנעול כ מופע של מחלקה כלשהיא משום שמנגנון נעילות ממומש

.Objectבמחלקה

Page 23: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

–synchronizedמתודה ראשון קוראthreadאם

למתודה על מופע מסוים– הוא נועל את המתודה.

התודה משתחררת רק כאשר הוא יוצא

מהמתודה. נעצרthreadאם ה-

באמצע – המתודה עלהמופע נשארת נעולה.

אם בזמן שהמתודה על המופע נשארת נעולה

threadהיא נקראת ע"י

Page 24: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

האחרthreadאחר ה-.ייעצר

נעילה על מופע )בניקודלנעילה על מתודה(:

class A

{

}

Page 25: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

A a = new A();

synchronized (a)

{

Page 26: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה

בזמן שנמצאים פה, .המופע מצביע עליו נעולa ש-

}

Page 27: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה