תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ...
-
Upload
cedric-tanner -
Category
Documents
-
view
35 -
download
6
description
Transcript of תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ...
![Page 1: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/1.jpg)
, תקשורת אסינכרוני תכנות- ל אפליקציות Windowsופיתוח
8.1- ל WindowsואפליקציותPhone 8
Asynchronous programming
![Page 2: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/2.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/3.jpg)
ProcessProcess. ) במחשב ) הרצה תוכנית הוא יישום
Process( הרצה קובץ (.EXEמריץ
Process. ההפעלה מערכת ידי על מנוהל
, : , זיכרון הקצאות כגון משאבים של קבוצה לתיאור משמש יישום .... , ייחודי מספר ידי על ומזוהה מעבד זמן הקצאת נחוצות ספריות
(PID)
כל ההפעלה מערכת ומבודד Processמבחינת בנפרד רץ(Isolated process - ה( .Proccesesמשאר
, המערכת אמינות את משפרת התהליכים בין המוחלטת ההפרדה. אחרים תהליכים על משפיעה לא אחד תהליך של נפילה
![Page 4: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/4.jpg)
Process כלProcess מכילThread. ) ליישום ) הכניסה כנקודת שמשמש ראשי תהליך
- ל הכניסה עם נוצר כאשר Mainהוא .Mainומסתיים מסתיימת
המילה פעמים הרבה מלווה יחיד תהליך שבהם ליישומיםUnresponsive " ”או איטיות תגובות לתאר שבאה
. מסוימים המצבים המערכת של תקיעה
ProcessShared Data
Thread
- " ה" כאשר מתרחשת כבדה Threadתקיעה בפעילות עסוק. זמן שגוזלת
![Page 5: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/5.jpg)
Processשל :Unresponsiveמקרים
. מורכבים חישובים
. / לרשת מידי הרבה העלאת מהרשת מידע הרבה הורדת
. גדולים קבצים שמירת
. / / אודיו עיבוד וידאו עיבוד תמונה עיבוד
. להיתקע למערכת שיגרמו נוספים מקרים להוסיף יכול מכם אחד שכל מניח אני
![Page 6: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/6.jpg)
Process על נוספים תהליכים לפתוח יכולת הוא הנדרש שהפתרון להניח ניתן הזה בחסרון בהתחשב
, התהליך את ישחררו ובכך ברקע אותה יבצעו מהעבודה חלק עצמם על שייקחו מנתהראשי.
מכונים הללו הנוספים .Worker Threadהתהליכים
זה שלכל בשלב להבין ראשי Threadיש Processחשובלייצר ריצה Threadsואפשרות נתיבי שמהווים נוספים
. במקביל שרצים עצמאיים
ProcessShared Data
Main Thread
Thread A Thread B Thread C
![Page 7: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/7.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/8.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/9.jpg)
Asynchronous Programmingעובדות:
( בעת בו המתרחשות מטלות מספר עם להתמודד צריכות האפליקציות (.Concurrencyרוב
( ) הרבה ) או זמן גוזל שפתרונה גדולה מאוד או גדולה מטלה עם להתמודד צריכה שאפליקציה שכיח דיזמן(.
משימתיות- ) (:Multi-Threadingרב( לתהליכים המאפשר נפוץ תכנות , Threadsמודל חולקים( התהליכים יישום בתוך במקביל להתקיים רבים
, - . הפעלה מערכת או תכנותית תשתית יישום של יכולת בפועל בנפרד רץ אחד כל אולם היישום משאבי את. מטלות מספר זמנית בו להריץ
אסינכרוני – קוד סינכרוני קוד
עד המטלות שאר ביצוע ואת הריצה המשך את חוסמת שמתבצעת מטלה שכל קוד הוא סינכרוני קוד(.Blocking Codeלסיומה )
המטלות שאר את לחסום מבלי בעת בו מטלות מספר עם להתמודד מסוגל הוא אם אסינכרוני הוא קוד. מסתיימת שמטלה עד להמתין ומבלי
, , , , מורכבים: חישובים לדיסק גישה לקוחות של בבקשות שרת טיפול לשרת בקשות שולח לקוח לדוגמהתמונה ..... עיבוד
![Page 10: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/10.jpg)
Asynchronous Programmingאסינכרוני ) מקבילי( – )Async Programmingקוד (Parallel Programingקוד
. דומים מאוד אבל שונים דברים שני
. אסינכרוני תמיד הוא מקבילי קוד
( אסינכרוני מקבילי( )Asynchronousקוד באמצעות( Parallelוקוד ממומשיםThreads.
, באמצעות כבדות מטלות עם להתמודד מסוגל קוד אסינכרוני Threadsבקוד : , מהאינטרנט גדול קובץ הורדת לדוגמה התוכנית שאר את חוסמים שאינם עצמאיים
- ה את חוסמת למתכנת )UIאינה זמין נשאר (.Responsive UIוהוא
למספר חלוקתה ידי על ומורכבת גדולה מטלה של ביצוע הכוונה מקבילי בקודThreads- : , ל התמונה את נחלק גדולה תמונה בעיבוד לדוגמה במקביל 10שרצים
, ידי על יטופל חלק כל שווים .Threadחלקים , התוצאה תוצג סיומם עם אחר
. דיו ברור לא הגבול ולעיתים מדי גדולה היא החפיפה
![Page 11: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/11.jpg)
Threads Yes\NoNo
. , באה לא המורכבות יותר ויקר ארוך מורכב התכנותבניהול אלא תהליכים ביצירת ביטוי לידי
. ביניהם ובאינטראקציה
. , יותר וארוכה יותר יקרה יותר מסובכת התחזוקהלבצע יותר .Debugקשה
, תהליכים – הקצאת במשאבים מחיר משלמים , אם משאבים גוזלים פועל תהליך החלפת
. יקר המחיר מוגזמת בצורה בתהליכים משתמשים
מול משפרים HDבעבודה שניים או אחד תהליך. גדולה, לאיטיות יגרום תהליכים עודף יעילות
Yes מניעתUnresponsiveness - ה כאשר - UIשל
" המשתמש " ממשק את תוקע מסוים תהליךתמשיך שהתוכנית כדי ברקע אותו להריץ נעדיף
. כרגיל להתבצע
( שרות קבלת לצורך חיצוני למחשב ,WSפניהDatabase).... אחר, לקוח
. מעבד וזמן עיבוד זמן שגוזל ארוך חישובי תהליך
משנה מטלות למספר מטלה לפצל ניתן כאשרבעלת המכונה משאבי את יותר טוב לנצל ובכך
. מעבדים מספר
![Page 12: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/12.jpg)
Threads השמות , System.Threadingמרחב חשובים וטיפוסים מחלקות מספר מגדיר
המחלקה .Threadבראשם
המחלקהThread , מטלה הרצת לסיים במקביל חדשה מטלה להריץ מאפשרת. פעילה, מטלה על מידע לקבל פעילה
: מטלה והפעלת יצירת( " עבודה " מתודת שמכונה מתודה במסגרת רצה (.Worker Methodמטלה , , גם איתה מסתיימת מסתיימת המתודה כאשר מתודה מפעילה היא מתחילה מטלה כאשר
המטלה. באמצעות מופעלת : Delegateהמתודה ThreadStartששמו
public delegate void ThreadStart ;)(-הDelegate: , , היא החתימה דנן במקרה המתודה של החתימה את מגדיר
void MethodName;)(
![Page 13: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/13.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/14.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/15.jpg)
תרגול-1תרגילים התרגילים 2ו מדף
![Page 16: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/16.jpg)
Threads? הקלעים מאחורי מתרחש מה
- ב רכיב ידי על מנוהלים .Thread Schedulerהנקרא CLRתהליכים
, משאבי יוקצו הפעילים התהליכים שלכל להבטיח ההפעלה למערכת התהליך בין לקשר תפקידו. עיבוד, משאבי יבזבזו לא פעילים לא ושתהליכים עיבוד
-לThread Scheduler מספר מאשר תהליכים יותר במחשב רצים כלל בדרך כי רבה אחריות. הליבות או המעבדים
, מבצע הוא אחד מעבד עם . Time Slicingבמחשבים " " , מעבד , לכל זמן פרוסת מקצה דהיינולתהליך המעבד משאב את ומעביר הנוכחי התהליך את משהה לתהליך הזמן הקצאת תום עם
הבא.
" , הקצאת של שילוב באמצעות התהליכים את מנהל מעבדים מרובה " Time Sliceבמחשב. אמתית ומקביליות
. שונים מעבדים על במקביל לרוץ יכולים תהליכים אמתית במקביליות
![Page 17: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/17.jpg)
Threads Lifecycle://http . . / / . ? =31093 =2www informit com articles article aspx p &seqNum
![Page 18: תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/18.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/19.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/20.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/21.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/22.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/23.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022062719/568130a6550346895d96a516/html5/thumbnails/24.jpg)
תרגולהתרגילים 3תרגילים מדף