תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- windows 8.1 ...

25
תתתתת תתתתתתתתת, תתתתתת תתתתתת תתתתתתתתת- תWindows 8.1 תתתתתתתתתת- תWindows Phone 8 Asynchronous programming

Upload: cedric-tanner

Post on 01-Jan-2016

35 views

Category:

Documents


6 download

DESCRIPTION

תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8. Asynchronous programming. Process, App Domain and Thread. Process AppDomain Thread Paramterised Threads Foreground and Background Threads. Thread Priority Exception Handling. Process. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

, תקשורת אסינכרוני תכנות- ל אפליקציות Windowsופיתוח

8.1- ל WindowsואפליקציותPhone 8

Asynchronous programming

Page 2: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Process, App Domain and Thread

Process

AppDomain

Thread

Paramterised Threads

Foreground and Background Threads

Thread Priority

Exception Handling

Page 3: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

ProcessProcess. ) במחשב ) הרצה תוכנית הוא יישום

Process( הרצה קובץ (.EXEמריץ

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

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

(PID)

כל ההפעלה מערכת ומבודד Processמבחינת בנפרד רץ(Isolated process - ה( .Proccesesמשאר

, המערכת אמינות את משפרת התהליכים בין המוחלטת ההפרדה. אחרים תהליכים על משפיעה לא אחד תהליך של נפילה

Page 4: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Process כלProcess מכילThread. ) ליישום ) הכניסה כנקודת שמשמש ראשי תהליך

- ל הכניסה עם נוצר כאשר Mainהוא .Mainומסתיים מסתיימת

המילה פעמים הרבה מלווה יחיד תהליך שבהם ליישומיםUnresponsive " ”או איטיות תגובות לתאר שבאה

. מסוימים המצבים המערכת של תקיעה

ProcessShared Data

Thread

- " ה" כאשר מתרחשת כבדה Threadתקיעה בפעילות עסוק. זמן שגוזלת

Page 5: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Processשל :Unresponsiveמקרים

. מורכבים חישובים

. / לרשת מידי הרבה העלאת מהרשת מידע הרבה הורדת

. גדולים קבצים שמירת

. / / אודיו עיבוד וידאו עיבוד תמונה עיבוד

. להיתקע למערכת שיגרמו נוספים מקרים להוסיף יכול מכם אחד שכל מניח אני

Page 6: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Process על נוספים תהליכים לפתוח יכולת הוא הנדרש שהפתרון להניח ניתן הזה בחסרון בהתחשב

, התהליך את ישחררו ובכך ברקע אותה יבצעו מהעבודה חלק עצמם על שייקחו מנתהראשי.

מכונים הללו הנוספים .Worker Threadהתהליכים

זה שלכל בשלב להבין ראשי Threadיש Processחשובלייצר ריצה Threadsואפשרות נתיבי שמהווים נוספים

. במקביל שרצים עצמאיים

ProcessShared Data

Main Thread

Thread A Thread B Thread C

Page 7: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Process השמות את System.Diagnosticsבמרחב לחקור מאפשרות אשר מחלקות כמה ישנן

:Processesה- במערכת שרצים

:המחלקה .Processלדוגמה

List<MyProcess> processList = new List<MyProcess>(); … private void ReadProcess() { Process[] process_arr = Process.GetProcesses(); MyProcess my_process; foreach (var p in process_arr) { my_process = new MyProcess(); my_process.PID = p.Id; my_process.ProcessName = p.ProcessName; my_process.ThreadCount = p.Threads.Count; processList.Add(my_process); } }

קוד : ProcessInvestigatingדוגמת

Page 8: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

AppDomain - ה בתוך NET Framework.בעולם ישירות מתארחים אינם הפעלה מערכת Processקבצי של

ההפעלה.

הנקרא לוגי תהליך ידי על מנוהל ההפעלה .AppDomainקובץ

Process מספר להכיל .AppDomainכל, AppDomainsיכול בלבד אחד הרצה קובץ להכיל יכול

AppDomain. , " השונים " התהליכים בין תלות אין מאוד גבוהה בידוד רמת מספקים

AppDomain אימות שתהליך משום ביצועים משפרים. מפושט הקוד

בתוךProcess להריץ ניתן הפעלה מערכת של יחידולנהל AppDomainsמספר להפעיל צורך שיהיה מבלי

Process. מהם אחד כל עבור

על* היריעה את נרחיב AppDomainsבהמשך

ProcessAppDomain

Shared Data

Thread

Page 9: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Asynchronous Programmingעובדות:

( בעת בו המתרחשות מטלות מספר עם להתמודד צריכות האפליקציות (.Concurrencyרוב

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

משימתיות- ) (:Multi-Threadingרב( לתהליכים המאפשר נפוץ תכנות , Threadsמודל חולקים( התהליכים יישום בתוך במקביל להתקיים רבים

, - . הפעלה מערכת או תכנותית תשתית יישום של יכולת בפועל בנפרד רץ אחד כל אולם היישום משאבי את. מטלות מספר זמנית בו להריץ

אסינכרוני – קוד סינכרוני קוד

עד המטלות שאר ביצוע ואת הריצה המשך את חוסמת שמתבצעת מטלה שכל קוד הוא סינכרוני קוד(.Blocking Codeלסיומה )

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

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

Page 10: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Asynchronous Programmingאסינכרוני ) מקבילי( – )Async Programmingקוד (Parallel Programingקוד

. דומים מאוד אבל שונים דברים שני

. אסינכרוני תמיד הוא מקבילי קוד

( אסינכרוני מקבילי( )Asynchronousקוד באמצעות( Parallelוקוד ממומשיםThreads.

, באמצעות כבדות מטלות עם להתמודד מסוגל קוד אסינכרוני Threadsבקוד : , מהאינטרנט גדול קובץ הורדת לדוגמה התוכנית שאר את חוסמים שאינם עצמאיים

- ה את חוסמת למתכנת )UIאינה זמין נשאר (.Responsive UIוהוא

למספר חלוקתה ידי על ומורכבת גדולה מטלה של ביצוע הכוונה מקבילי בקודThreads- : , ל התמונה את נחלק גדולה תמונה בעיבוד לדוגמה במקביל 10שרצים

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

. דיו ברור לא הגבול ולעיתים מדי גדולה היא החפיפה

Page 11: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Threads Yes\NoNo

. , באה לא המורכבות יותר ויקר ארוך מורכב התכנותבניהול אלא תהליכים ביצירת ביטוי לידי

. ביניהם ובאינטראקציה

. , יותר וארוכה יותר יקרה יותר מסובכת התחזוקהלבצע יותר .Debugקשה

, תהליכים – הקצאת במשאבים מחיר משלמים , אם משאבים גוזלים פועל תהליך החלפת

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

מול משפרים HDבעבודה שניים או אחד תהליך. גדולה, לאיטיות יגרום תהליכים עודף יעילות

Yes מניעתUnresponsiveness - ה כאשר - UIשל

" המשתמש " ממשק את תוקע מסוים תהליךתמשיך שהתוכנית כדי ברקע אותו להריץ נעדיף

. כרגיל להתבצע

( שרות קבלת לצורך חיצוני למחשב ,WSפניהDatabase).... אחר, לקוח

. מעבד וזמן עיבוד זמן שגוזל ארוך חישובי תהליך

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

. מעבדים מספר

Page 12: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Threads השמות , System.Threadingמרחב חשובים וטיפוסים מחלקות מספר מגדיר

המחלקה .Threadבראשם

המחלקהThread , מטלה הרצת לסיים במקביל חדשה מטלה להריץ מאפשרת. פעילה, מטלה על מידע לקבל פעילה

: מטלה והפעלת יצירת( " עבודה " מתודת שמכונה מתודה במסגרת רצה (.Worker Methodמטלה , , גם איתה מסתיימת מסתיימת המתודה כאשר מתודה מפעילה היא מתחילה מטלה כאשר

המטלה. באמצעות מופעלת : Delegateהמתודה ThreadStartששמו

public delegate void ThreadStart ;)(-הDelegate: , , היא החתימה דנן במקרה המתודה של החתימה את מגדיר

void MethodName;)(

Page 13: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Threads static void WorkerMethod1() { int counter = 0;

for (uint i = 0; i < 1000; i++) { Console.ForegroundColor = ConsoleColor.Red; counter++; Console.WriteLine("WorkerMethod1 : counter : " + counter); }}

ThreadStart ts1 = new ThreadStart(WorkerMethod1);Thread t1 = new Thread(ts1);t1.Start();

התהליך של העבודה מתודת

Delegate את המכילהתהליך של העבודה מתודת

- ה הגדרתThread

- ה הפעלתThread : קוד FirstThreadSampleדוגמת

Page 14: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Threads

static void WorkerMethod1() { int counter = 0; for (uint i = 0; i < 1000; i++) { Console.ForegroundColor = ConsoleColor.Red; counter++; Console.WriteLine("WorkerMethod1 : counter : " + counter); }}

Thread t1 = new Thread(WorkerMethod1);t1.Start();

להגדרת נוספת אפשרותתהליך

: קוד FirstThreadSampleדוגמת

Page 15: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

תרגול-1תרגילים התרגילים 2ו מדף

Page 16: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Threads? הקלעים מאחורי מתרחש מה

- ב רכיב ידי על מנוהלים .Thread Schedulerהנקרא CLRתהליכים

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

-לThread Scheduler מספר מאשר תהליכים יותר במחשב רצים כלל בדרך כי רבה אחריות. הליבות או המעבדים

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

הבא.

" , הקצאת של שילוב באמצעות התהליכים את מנהל מעבדים מרובה " Time Sliceבמחשב. אמתית ומקביליות

. שונים מעבדים על במקביל לרוץ יכולים תהליכים אמתית במקביליות

Page 17: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Threads Lifecycle://http . . / / . ? =31093 =2www informit com articles article aspx p &seqNum

Page 18: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Paramterised Threads

? פרמטרים רוצים עם ומה

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

את יש זה :ParameterizedThreadStartבשביל

public class Parameter{ public int Num { get; set; } public ConsoleColor Color { get; set; }}static void WorkerMethod(object data){ Parameter parameter = data as Parameter; for (int i = 0; i < parameter.Num; i++) { Console.ForegroundColor = parameter.Color; Console.WriteLine("WorkerMethod : counter : " + i); }}Parameter param1 = new Parameter { Num = 100, Color = ConsoleColor.Red };ParameterizedThreadStart pts1 = new ParameterizedThreadStart(WorkerMethod);Thread thread1 = new Thread(pts1);thread1.Start(param1);

- ה Dataמחלקת

Worker Method הפעםפרמטר עם

עם והרצתו התהליך יצירתפרמטר

: קוד ParameterizedThreadStartSampleדוגמת

Page 19: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Foreground and Background Threads: מצבים בשני לפעול יכול תהליך

Foreground Thread , התהליכים – עוד כל בחיים נשארת התוכנית המחדל ברירתרצים.

Background Thread. התהליך – את הורד התוכנית סיום

: קוד דוגמתForegroundAndBackgroundThread

class Program { static void WorkerMethod() { for (int i = 0; i < 10; i++) { Console.WriteLine("WorkerMethod : counter : " + i); } Console.WriteLine("End Of WorkerMethod"); } static void Main(string[] args) { ThreadStart ts = new ThreadStart(WorkerMethod); Thread t = new Thread(ts); t.Start(); Console.WriteLine("End Of Main"); } }

Foreground Thread

Page 20: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Foreground and Background Threads

static void Main(string[] args) { ThreadStart ts = new ThreadStart(WorkerMethod); Thread t = new Thread(ts); t.IsBackground = true; t.Start(); Console.WriteLine("End Of Main"); }

Background Thread

Page 21: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Thread Priority " הגדרת " באמצעות תהליך כל של הדחיפות רמת להגדיר .Priorityניתן

: עדיפות של רמות Lowest, BelowNormal, Normal, AboveNormal, Highestחמש

- ה על משפיעה .Time Sliceהעדיפות היישום של התהליכים לשאר ביחס התהליך שיקבל

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

ביישומי עדיפות מלהגדיר להימנע . UIרצוי החלון, של העיבוד מהירות על לרעה להשפיע עלול

ThreadStart ts1 = new ThreadStart(WorkerMethod1);Thread t1 = new Thread(ts1);t1.Priority = ThreadPriority.Highest;t1.Start();

Thread Priority

Page 22: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Exception Handling בלוקTry\Catch. תהליך בתוך חריגה מתרחשת אם רלבנטי לא

. עצמאי ביצוע נתיב יש שלתהליך העובדה בשל מתבקש אפילו ()static void WorkerMethod זה { int divider = 0; int num = 10 / divider; } static void Main(string[] args) { try { ThreadStart ts = new ThreadStart(WorkerMethod); Thread t = new Thread(ts); t.Start(); } catch(Exception e) { Console.WriteLine(e.Message); } }

: קוד דוגמתThreadException

Page 23: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

Exception Handling פנימיות מחריגות להתעלם ניתן לא ולכן היישום כל לנפילת תגרום בתהליך חריגה

בתהליכים.

: רמות בשתי בהם לטפל הוא הפיתרון

.Try\Catchבלוק 1. עצמה העבודה מתודת בתוך

בכל – AppDomain.CurrentDomain.UnhandledExceptionהאירוע 2. מופעל האירוע , , פעולות ביצוע רק אלא הקריסה את למנוע ביכולתו אין מטופלת לא חריגה שיש פעם

. ) , עצמה ) הקריסה לפני למשתמש הודעה שמירה כמו אחרונות

נוספת WPFב- 3. אפשרות עליה ) Application.DispatcherUnhandledExceptionיש) בהמשך נדבר

: קוד דוגמתThreadException

AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e){ Exception exception = e.ExceptionObject as Exception; Console.WriteLine(exception.Message);}

האירוע

הטיפול באירוע

Page 24: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

תרגולהתרגילים 3תרגילים מדף

Page 25: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1  ואפליקציות ל- Windows Phone 8

: , , ב להוריד ניתן מצגות חומרים הסילבוס את

. . .www corner co il