טיפ Parallel.ForEach

היי לכולם, שמי קיריל סקליאר.
סוף סוף החלטתנו לפתוח בלוג – אני מקווה שהוא יהיה גם מקצועי וגם כייפי.
קצת עליי, אז אני מפתח צד שרת וצד לקוח, 7 שנות ניסיון כמפתח וכראש צוות, מתמחה בארכיטקטורת מיקרוסופט.
כיום אני גם שותף-בעלים של חברת TechedUp, ובשנה האחרונה אימצנו אל חיקנו גם את העולם הOpen Source.
בבלוג זה נשתף את הידע שלנו בתחומים שונים.
חוויה נעימה שתהיה לכולנו 🙂

החלטתי להתחיל בטיפ מאוד שימושי:

כאשר יש לנו מערך, רשימה או כל אובייקט שניתן לבצע עליו foreach  (אובייקטים שמממשים את IEnumerable),

ניתן לשפר את הביצועים של מעבר על הרשימה על ידי שימוש בכל הCores של המחשב.

בשביל זה אנחנו נשתמש ב TPL – Task Parallel Library   , שזאת בעצם ספריה שאחראית על taskים מקבילים.

מה קורה בעצם?

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

למשל, יש לנו 10000000 מספרים במערך, לכן מה שיקרה זה שייווצרו 10000000taskים, שירוצו במקביל תלוי מי הcore הפנוי.

הtaskים יכולים לרוץ בthreadים שונים או באותו thread (לא מחייב שיהיה thread ייעודי כל פעם).

בקוד לדוגמא, אנחנו משחקים משחק 7 בום

החוקים פשוטים:

א.     המספר מתחלק ב- 7 ללא שארית

ב.     מספר מכיל ספרה 7

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

אחרי שמריצים את הקוד, רואים שמעבר על רשימה בצורה מקבילה מהיר פי 3 מרשימה רגילה.

התוצאות של ההרצה תלויות חומרה וכמות הcores

results

נא לשים לב, שהשימוש בזה יהיה רק כאשר אין חשיבות לסדר!!!

מקווה שהטיפ יהיה שימושי,

אם יש שאלות, תשאירו פה שאלות

או תכתבו למייל

ואני אשמח לענות

Leave a Reply

Your email address will not be published. Required fields are marked *

*