Microsoft PowerPoint - 10_threads.ppt

מסמכים קשורים
Slide 1

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

מהוא לתכנות ב- JAVA מעבדה 3

מבוא למדעי המחשב

Microsoft PowerPoint - rec3.ppt

הטכניון - מכון טכנולוגי לישראל הפקולטה להנדסת חשמל המעבדה למערכות תכנה מרושתות ניסוי בתכנות מקבילי ב- Java המאחר ביותר מ 51 דקות לא יורשה לבצע את הניס

מבוא למדעי המחשב

PowerPoint Presentation

PowerPoint Presentation

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

PowerPoint Presentation

Slide 1

PowerPoint Presentation

מבוא למדעי המחשב

Slide 1

תרגול 1

מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי

מבוא למדעי המחשב

Homework Dry 3

PowerPoint Presentation

מבוא למדעי המחשב

Slide 1

תרגול 1

מבוא לתכנות ב- JAVA תרגול 11

מבוא לתכנות ב- JAVA תרגול 7

Slide 1

תכנות מונחה עצמים א' – תש"ע

לנץ קרן מרצה: תכנותמונחהעצמים) ( יוםשישי 15 אוקטובר 0202 ב מועד 0202, אביב סמסטר סמסטר סוף מבחן גוטמן אייל רביב, אריאל משנה, אלון מתרגלים: הנחי

מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו

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

בחן במערכות הפעלה

Microsoft Word - pitaron222Java_2007.doc

משימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות תכנות מתק

Microsoft PowerPoint - lec10.ppt

פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.

מקביליות

תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש

מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב

מקביליות

תרגול 1

PowerPoint Presentation

מתכונת עיצוב 3013

מספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה

Slide 1

מבוא למדעי המחשב

תוכנה 1 תרגול מספר 12: GUI כתיבת מחלקות גנריות בית הספר למדעי המחשב אוניברסיטת תל אביב 1

תורת הקומפילציה

שאלהIgal : מערכים דו מימדיים רקורסיה:

סדנת תכנות ב C/C++

תרגול 1

PowerPoint Presentation

יוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן

PowerPoint Presentation

מבוא לאסמבלי

הגשה תוך שבוע בשעת התרגול

מבוא למדעי המחשב, סמסטר א', תשס"ח תרגול מס' 2

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

Microsoft PowerPoint - L01-n.ppt

Microsoft PowerPoint - lec2.ppt

BIG DATA תיאור הקורס המונח Big Data הולך וצובר תאוצה בשנים האחרונות, הוא הופך למגמה רווחת בתעשייה. המשמעות הפרקטית של המונח Big Data הינה טכנולוגיות נ

פתרון 2000 א. טבלת מעקב אחר ביצוע האלגוריתם הנתון עבור הערכים : פלט num = 37, sif = 7 r האם ספרת האחדות של sif שווה ל- num num 37 sif 7 שורה (1)-(2) (

Slide 1

מקביליות

שאלהIgal : מערכים דו מימדיים רקורסיה:

Slide 1

תוכנה 1 בשפת Java שיעור מספר 3: "חתיכת טיפוס"

PowerPoint Presentation

Slide 1

PowerPoint Presentation

Microsoft PowerPoint - T-10.ppt [Compatibility Mode]

1

PowerPoint Presentation

תרגול 3 - מערכים

פ רק כה ) פ ס וק ים ז-יא( ז ו א ל ה י מ י ש נ י ח י י א ב ר ה ם א ש ר ח י: מ א ת ש נ ה ו ש ב ע ים ש נ ה ו ח מ ש ש נ ים. ח ו י ג ו ע ו י מ ת א ב ר ה ם

Homework-L9-Skills-1.pub

Slide 1

Microsoft PowerPoint - rec1.ppt

שאלהIgal : מערכים דו מימדיים רקורסיה:

ביה"ס היסודי ע"ש יצחק רבין, נשר

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

מס' סידורי: ת.ז.: עמוד 1 מתוך 20 בחינה בתוכנה 1 סמסטר ב', מועד א',תשס"ט 5/7/2009 וולף, ליאור ליאור שפירא, נעמה מאיר, מתי שמרת הוראות )נא לקרוא!( משך ה

Microsoft PowerPoint - lec9.ppt

Microsoft PowerPoint - lec9.ppt

המשימה תרגול מס' 5: קלט-פלט במערכות הפעלה שונות יש סימונים שונים עבור ירידת שורה :)newline( ב- UNIX/Linux )Line Feed( \n ב- Windows )Carriage Return +

איטרטורים: 1 תוכנה 1 סתיו תשע"ג תרגיל מספר 9 הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת התרגיל תעשה במערכת ה moodl

שבוע 4 סינטקס של HACK ASSEMBLY ניתן להשתמש בשלושה אוגרים בלבד:,A,D,M כולם בעלי 16 ביטים. M אינו אוגר ישיר- הוא מסמן את האוגר של ה RAM שאנחנו מצביעים ע

תשע"דד אביב תוכנה 1 תרגיל מספר 4 עיבוד מחרוזות וקריאה מקבצים הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס..(

Slide 1

Office 365 ProPlus בחינם לסטודנטים באוניברסיטת בן גוריון בנגב הוראות סטודנטים באוניברסיטת בן גוריון בנגב יכולים להוריד ולהתקין את חבילת התוכנה Office

מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי

1

Slide 1

PowerPoint Presentation

תמליל:

נוש אים מתקדמים ב Java תכ נות מ ר ובה חו ט י ם אוהד ברזילי אוניברסיטת תל אביב

מק בי ל יות ריבוי מעבדים processors) (multi זמן עיבוד slicing) (time ל עו מת חלוק ת רמת התהליך (multithreading) ההפעלה processes) (multi ל עו מ ת רמת מ ער כת 2

חוטים תה לי ך (process) הוא הפש טה ש ל מח ש ב וירטואל י חוט context) (execution thread, execution הוא הפשטה מעבד וירטואלי main() CPU, Code, Data זמ ן createthread( f() ) בשפת :C main() f() 3

למ ה חוטים? הנדסת תוכנה: מודלריות, הכמסה שימוש יעיל במשאבים חישוב מבוזר משימות אופיניות: Non blocking I/O Timers משימות בלתי תלויות אלגוריתמים מקביליים דברים ש"רצים ברקע" Collection) (Garbage 4

חוטים ב- Java כמו כ ל דבר ב-,Java מופע של המחלקה גם חו ט ב Java הוא עצם Thread חוט תמיד מריץ מתודה ע ם חתימה ק בוע ה: public void run() חוץ מהחוט הראש י שמ ר יץ את main() מחלקה שמ מ משת את run() בעצם מ מ משת את המנשק Runnable כלומר, חוט ב Java הוא מופע של המחלקה Thread שהועבר לו כארגומט (למשל בבנאי) עצם ממחלקה שהיא implements Runnable 5

public class ThreadTester { public static void main(string args[]) { HelloRunner r = new HelloRunner(); Thread t = new Thread(r); t.start(); // do other things... class HelloRunner implements Runnable { int i; public void run() { i = 0; while (true) { System.out.println("Hello " + i++); if (i == 50) { break; 6

שיתוף מידע ההבחנה עדינה על אותו עצם Runnable יכולים לרוץ במקביל 2 חוטים הדבר מאפשר לשני החוטים לחלוק מידע בינהם public class TwoThreadTester { public static void main(string args[]) { HelloRunner r = new HelloRunner(); Thread t1 = new Thread(r); Thread t2 = new Thread(r); t1.start(); t2.start(); מה יודפס? כדי להבין טוב יותר מי מדפיס מה, נוסיף פרטים להדפסה 7

public class TwoThreadTesterId { public static void main(string args[]) { HelloRunnerId r = new HelloRunnerId(); Thread t1 = new Thread(r, "first"); Thread t2 = new Thread(r, "second"); t1.start(); t2.start(); class HelloRunnerId implements Runnable { int i; public void run() { i = 0; while (true) { System.out.println( Thread.currentThread().getName() + ": Hello " + i++); if (i == 50) break; 8

מחזור החיים של חוט (חל קי) 9

חסימת חוט public class Runner implements Runnable { public void run() { while (true) { // do lots of interesting stuff //... // Give other threads a chance try { Thread.sleep(10); catch (InterruptedException e) { // This thread s sleep was // interrupted by another thread שיטה זו מחליפה את השימוש ב- suspend ו- deprecated שהתגלו כבעיתיות והוכרזו resume 10

סיו ם חוט public class Runner2 implements Runnable { private boolean timetoquit = false; public void run() { while (!timetoquit) { // continue doing work // clean up before run() ends public void stoprunning() { timetoquit = true; 11

סיו ם חוט public class ThreadController { private Runner2 r = new Runner2(); private Thread t = new Thread(r); public void startthread() { t.start(); public void stopthread() { // use specific instance of Runner r.stoprunning(); שיטה זו מחליפה את השימוש ב- stop ו- runfinalizersonexit שהתגלו 12 כבעיתיות והוכרזו deprecated תכנות מתקדם ב Java אוניברסיטת תל אביב

מתודו ת מיושנות ה מאמ ר המ לא: http://java.sun.com/j2se/1.5.0/docs/guide/misc/threadprimitivedeprecation.html 13

עבודה עם חוטים isinterrupted() שאילתות: isalive(), interrupted() עדי פות ריצה: getpriority() setpriority() חסימת חוט (static) Thread.sleep() join() (static) Thread.yield() 14

שימוש ב join public static void main(string[] args) { Thread t = new Thread(new Runner()); t.start(); //... // Do stuff in parallel with the other thread for a while //... // Wait here for the other thread to finish try { t.join(); catch (InterruptedException e) { // the other thread came back early // Now continue in this thread //... 15

ירושה מ Thread public class MyThread extends Thread { public void run() { while (true) { // do lots of interesting stuff try { Thread.sleep(100); catch (InterruptedException e) { // sleep interrupted public static void main(string args[]) { Thread t = new MyThread(); t.start(); 16

ירושה לע ומת הכלה המחלקה Thread עצמה היא Runnable ולכן ניתן לרשת ממנה, לדרוס את run() ולקבל בקלות מחלקה שהיא גם חוט עצמאי כמו שכבר ראינו בכמה הזדמנויות בקורס, יתרונות מתודולוגיים גם בהק ש ר זה: עיצוב נקי התאמה לירושה יחידה עיקביות עם ספריות אחרות לה כל ה 17

שימוש ב synchronized public class MyStack { int idx = 0; char[] data = new char[6]; public void push(char c) { data[idx] = c; idx++; public char pop() { idx--; return data[idx]; ננסה לתאר תרחישים שבהם עבו דה ע ם המחלק ה לא תצליח בתוכנ ית מרובת חוטים הפ עולות push ו- pop צריכו ת להתבצע ללא הפ ר ע ה יש לבצע אותן כ פעול ות אטומיות כד י לשמור על ע קביות מבנ ה ה נ תונים 18

מנעו ל לע צמי ם Java מספקת לכל עצ ם (במחלק ה אנלוגיה: מפ תח יחיד לשימוש (Object מנעול פרטי בשרותים ציבוריים כאשר מספר חוטים רצים על אותו העצם יכול אחד מהם לקחת את המפתח לעצמו ובכך לחסום את ריצת האחרים public void push(char c) { synchronized (this) { data[idx] = c; idx++; 19

מנעו ל לע צמי ם Java מספקת לכל עצ ם (במחלק ה אנלוגיה: מפ תח יחיד לשימוש (Object מנעול פרטי בשרותים ציבוריים כאשר מספר חוטים רצים על אותו העצם יכול אחד מהם לקחת את המפתח לעצמו ובכך לחסום את ריצת האחרים public void push(char c) { synchronized (this) { data[idx] = c; idx++; 20

מנעו ל לע צמי ם כאשר מגיע חוט אחר לאותו קטע קוד, המנעול חסר, מחכה לחזרתו והחוט public void push(char c) { synchronized (this) { data[idx] = c; idx++;? שחרור המנעול מתבצע אוטומטית ביציאה מבלוק :synchronized אחרי סיום הבלוק אחרי break, return, throw מתוך הבלוק 21

עק ביות בשימוש במנעול ים כדי שהמנגנון יעבוד יש לסנכרן את כל הגישות לנתונים המשותפים מתוך pop וגם מתוך (push (גם יש להגן על נתונים משותפים רגישים ע"י private אחרת קוד לקוד יוכל לשנות אותם בצורה לא מסונכרנת שני קטעי הקוד הבא שקולים: public void push(char c) { synchronized (this) { // The push method code public synchronized void push(char c) { // The push method code 22

מחזור החיים של חוט (חל קי) 23

מבוי סתום (deadlock) כאשר שני חוטים ממתנים כל אחד למנעול המוחזק אצל האחר (מ ש א ב) קשה לזהות או להימנע מכך במקרה הכללי, ואולם שמירה על כמה כללים פשוטים ימנעו זאת ברוב המקרים: החלטה על סדר נעילה קבוע אכיפת הסדר לאורך התוכנית שחרור המנעולים בסר הפוך 24

תק שורת בין חוטים notify) (wait & אנלו גיה: נהג ה מונ ית והנוס ע ל צור ך מי מו ש הרעי ון מס פקת :Java את המתודות notify ו- wait הגדרת wait pool ו- notify pool (הממומשים מאחורי הקלעים) השימוש במתודות wait ו- notify synchronized context הוא מתוך 25

מחזור החיים של חוט 26

דוג מת הצר כן-יצרן public class Producer implements Runnable { private SyncStack thestack; private int num; private static int counter = 1; public Producer (SyncStack s) { thestack = s; num = counter++; 27

ל וג יק ת היצרן public void run() { char c; for (int i = 0; i < 200; i++) { c = (char)(math.random() * 26 +'A'); thestack.push(c); System.out.println("Producer" + num + ": " + c); try { Thread.sleep((int)(Math.random() * 300)); catch (InterruptedException e) { // ignore it // END run method // END Producer class 28

הצרכן public class Consumer implements Runnable { private SyncStack thestack; private int num; private static int counter = 1; public Consumer (SyncStack s) { thestack = s; num = counter++; 29

ל וג יק ת הצרכן public void run() { char c; for (int i = 0; i < 200; i++) { c = thestack.pop(); System.out.println("Consumer" + num + ": " + c); try { Thread.sleep((int)(Math.random() * 300)); catch (InterruptedException e) { // ignore it // END run method // END Consumer class 30

המחסנית public class SyncStack { private List<Character> buffer = new ArrayList<Character>(400); public synchronized char pop() { //... public synchronized void push(char c) { //... איך נכתוב את המתודות pop ו- push כך שישמר העיקרון שפעולת pop ממתינה לכך שיהיה איבר במחסנית? 31

pop() public synchronized char pop() { char c; while (buffer.size() == 0) { try { this.wait(); catch (InterruptedException e) { // ignore it... c = buffer.remove(buffer.size() - 1); return c; אובייקט המחסנית עצמו מגלם ארוע לוגי "StackNotEmpty" הארוע לא מופיע בקוד בצורה מפורשת והמתכנתת צריכה לשמור על עיקביותו 32

push() public synchronized void push(char c) { this.notify(); buffer.add(c); המתודה push מבטיחה (ע"פ תנאי האחר של החוזה שלה) כי בסיומה המחסנית אינה ריקה על כן המחסנית מודיעה (notify) לאחד המעוניינים בארוע (אם קיים כזה) שהארוע התרחש אם יש יותר מממתין אחד לארוע, תודיע מערכת ההפעלה רק לאחד הממתינים על התרחשותו אם יש צורך להודיע לכולם ניתן להשתמש במתודה notifyall() 33

2 יצר נים, 2 צרכנים public class SyncTest { public static void main(string[] args) { SyncStack stack = new SyncStack(); Producer p1 = new Producer(stack); Thread prodt1 = new Thread (p1); prodt1.start(); Producer p2 = new Producer(stack); Thread prodt2 = new Thread (p2); prodt2.start(); Consumer c1 = new Consumer(stack); Thread const1 = new Thread (c1); const1.start(); Consumer c2 = new Consumer(stack); Thread const2 = new Thread (c2); const2.start(); 34