Web viewהמתג במזוודת מענק יהיה מתג בעל אפשרויות ניהול ויכלול את התמיכה בפרוטוקול ... תיק מוצר
math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות...
Transcript of math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות...
![Page 1: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/1.jpg)
Threadsחוטים
טכניקת תכנות שבו- יישום אחד ממומש ע"י
מספר תוכניות Multiעצמאיות נקרא
Programming. יש מספר סיבות-
לממש יישום ככה:מידור.1 לפעמים נוח לתכנת.2
ככה )סוג של שבירתהמטלה(.
![Page 2: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/2.jpg)
היום גם יכול להיות.3 שפעולות מסוימות
יתבצעו במקביל הודות לליבות כפולות וריבוי
מעבדים. לפעמים )בתכנות.4
מדעי( ניתן להפעיל מספר גישות לפתרון
לבעיה קשה.
![Page 3: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/3.jpg)
לפעמים יישום.5 מבצע מספר גדול של פעולות קטנות
ולפעמים נוח לתכנת את הפעולות הללו
כתוכניות עצמאיות.
בעיקרו של דבר של דבר,multi-programmingניתן
אפשרויות:2לממש ע"י .processריבוי תהליכים
.threadsריבוי חוטים
![Page 4: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/4.jpg)
תהליך הוא אמצעי של הרצת תוכניות עצמאיותברמת מערכת ההפעלה.
Threadהוא אמצעי שבו תהליך בודד של מערכת ההפעלה מתחלק לתתי
תוכניות עצמאיות. –ים באThreadממימוש
בשני רמות:-System Thread–
התמיכה בריבוי תוכניות נתמך ברמת
מערכת ההפעלה.
![Page 5: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/5.jpg)
-User End Threads– הניהול של תתי התוכניות נעשה
ביישום עצמו בדרך כלל בסיוע מערכת
ההפעלה בכל הקשורלמדידות זמן וכו'.
-Threadשאלה: למה יש ים?
![Page 6: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/6.jpg)
אנחנו היום עובדים במערכות הפעלה
מוגנות, שבין השאר מגינות על תהליכים זה
מזה. למה לא לעבוד ברמת
התהליכים? תשובה: תהליכים הם משאב של המערכת, הכמות עשויה להיות
מוגבלת,
![Page 7: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/7.jpg)
המידור בין תהליכים הוא גבוה, ותקשורת בין
תהליכים הוא דבר יקר. תהליך הוא משאב יחסית
.CPUיקר בזמן -ים נחשבThreadמערכת
בעיני המערכת לתהליך ביןאין מידור, ולכן אחד
מרחב-ים: Threadה- הכתובות של כולם
.משותף
![Page 8: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/8.jpg)
השדותJavaלדוגמא, ב- הסטטיים של התוכנית
.Threadמשותפים לכל ה- מחייבתThreadיצירת
פחות פעולות מיצירתתהליך.
לפעמים יש פחות הגבלות על יצירת
Thread.ים- יצירת תהליך הוא מהלך
די תלוי במערכתההפעלה.
![Page 9: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/9.jpg)
-ים ב-Threadתמיכה ב-Javaמאפשר מימוש קוד
בלי תלוי במערכתההפעלה.
Threadהעברת מידע בין –ים הוא דרך שטחי
זיכרון מה שיוותר מורכבזה הסנכרון ביניהם.
:Threadמהלך חייו של newנולד במצב -
![Page 10: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/10.jpg)
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: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/11.jpg)
למצב חסימה אם.3 ניסה לגשת למשאב
blockedנעול למצב סיום.4
Terminated.
![Page 12: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/12.jpg)
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: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/13.jpg)
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: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/14.jpg)
סיכום: לעשותאפשר 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: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/15.jpg)
בתוכנית הראשית להקצות.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: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/16.jpg)
–ים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: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/17.jpg)
-ים, ע"י פקודה 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: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/18.jpg)
-Threadהעברת מידע בין ים היא עניין פשוט ע"י
שימוש או במשתנים סטטיים,- הקצאה דינמית של-
שטח המשמש-Threadלתקשורת בין
ים והעברת כתובת
![Page 19: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/19.jpg)
-Threadהשטח לידי ה-ים המעורבים.
עדיין יש בעיה של סנכרון-ים.Threadאו תאום
מה זה סנכרון? לפעמים צריך לדאוג שתוכניות עצמאיות שמשתפות פעולה
יתבצעו בסדר מסוים.
![Page 20: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/20.jpg)
לפעמים חלק מה-Threadים לא יכולים-
להמשיך )אין להם מהלעשות( עד שאחד ה-
Threadים יעשה פעולה– מסוימת.
דוגמא מיוחדת של מניעההרעיון הזה הוא
.Mutual Exclusion הדדיתמניעה הדדית פירושו ש-
Threadניגש למשאב משותף רק כאשר הוא
אולפני שינוי קרי: תקין
![Page 21: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/21.jpg)
לאחר השלמתלחלוטין שינוי.
הבעיה נובעת מכך ,מכסות זמןשבמסגרת
Thread בכללהיעצר יכול נקודה בכל רגע. מקור הבעיה היא
תוך כדיthreadבעצירת שינוי משאב גלובלי.
פתרון אפשרי הוא מנגנון:נעילות
thread משאבנועל משותף לפני השינוי, וכל
![Page 22: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/22.jpg)
thread לגשת המנסה .נעצרלמשאב הנעול –
הנועלthreadכאשר ה- את המשאב,משחרר מבין הממתיניםהראשון
משתחרר וחוזר חלילה. מנגנון נעילות הוא מנגנון רצוני שאינו מונע עצירה
באמצע. threadשל אפשר לנעול כ מופע של מחלקה כלשהיא משום שמנגנון נעילות ממומש
.Objectבמחלקה
![Page 23: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/23.jpg)
–synchronizedמתודה ראשון קוראthreadאם
למתודה על מופע מסוים– הוא נועל את המתודה.
התודה משתחררת רק כאשר הוא יוצא
מהמתודה. נעצרthreadאם ה-
באמצע – המתודה עלהמופע נשארת נעולה.
אם בזמן שהמתודה על המופע נשארת נעולה
threadהיא נקראת ע"י
![Page 24: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/24.jpg)
האחרthreadאחר ה-.ייעצר
נעילה על מופע )בניקודלנעילה על מתודה(:
class A
{
}
![Page 25: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/25.jpg)
A a = new A();
synchronized (a)
{
![Page 26: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/26.jpg)
בזמן שנמצאים פה, .המופע מצביע עליו נעולa ש-
}
![Page 27: math.haifa.ac.ilmath.haifa.ac.il/ronn/java/wordfiles/threads.docx · Web view אפשרויות ליצירת Thread – ים שיטה 1: המינימום הוא לממש מחלקה](https://reader035.fdocuments.net/reader035/viewer/2022081512/5b0607787f8b9ad5548c4fc8/html5/thumbnails/27.jpg)