איך ממומשים threads בjava?

EndersG

New member
איך ממומשים threads בjava?

שלום לכולם - אני מנסה להבין איך מנוהלים הthreads (תהליכונים) בjava ולא מצליח למצוא הסבר ברשת. כעקרון הבנתי בין השאר את הדברים הבאים: 1. ניתן ליצור תהליכונים שפועלים "במקביל". 2. ניתן לשתף משאבים עבור התהליכונים. 3. מישהו חיצוני מנהל את התהליכונים אבל יש להם דרך לתקשר אחד עם השני (notify) אני מנסה להבין איך זה ממומש מול מערכת ההפעלה מתוך (2),(3) אני מסיק שהתהליכונים אינם מבוצעים בעזרת מנגנון הדומה לfork כי אחרת לא הייתי יכול לשתף זכרון. עכשיו מתחיל הקטע שמעניין אותי: א. איפה ממומש המננון הזה - ברמת JVM? ברמת מערכת ההפעלה? לפעמים כך ולפעמים כך? ב. אם הוא מנוהל במערכת ההפעלה האם בuserspace או שאני משלם בcontext switch ? עד כמה זה פוגע ביעילות? אני מניח שעוד שאלות יצוצו ככל שאקרא על זה יותר - אשמח לקבל הכוונה למאמר טוב בנושא.
 

desertboy

New member
אתה קצת מערבב נושאים

סביר להניח שה jvm משתמש ב threads כמו שהם קיימים בסביבה ב jvm עובד כלומר userspace בקרנלים שלא תומכים ב threads ב kernel space (לא שאני מכיר כאלה הכל בצורה תאורטית) וההפך. לגבי יתרונות וחסרונות זה כבר לא נושא ששיך ל jvm וצריך להבין ש context switch של threads הוא לא הרבה יותר מהחלפת ה SP .
 

voguemaster

New member
הבנתי אותך

החלפת קונטקסט הוא דווקא כן הרבה יותר מאשר החלפת המחסנית בזו של ה-thread האחר. מה לגבי שמירה על מצב ? מה לגבי thread local storage ? מה לגבי SCOPE ?
 

desertboy

New member
בגדול

אפשר להגיד שאוסף המידע של thread כולל את ה stack , program pointer registers , והמצב בו ה thread מצוי . לא הבנתי למה אתה מתכון ב scope של ה thread . בכל אופן זה לא הרבה נתונים לשמור אם כי הגזמתי קצת עם ה sp :)
 

dharmax

New member
תהליכונים

האמת היא, שזו פעם ראשונה שאני נתקל במילה הזו. בכלל, אני עדיין לא רגיל לדבר בעברית על תיכנות. בכל אופן, המנגנון מממומש קודם כל בjvm והjvm, מצידו, יכול להשתמש בתכונות של מערכת ההפעלה והמעבד כדי לעשות את הדברים יעילים, כמו למשל, להקצות תהליכון של מערכת ההפעלה עבור כל תהליכון בתוכנית הג'אווה. זה כבר תלוי במימוש של ה jvm שהוא כידוע דבר שמשתנה בהתאם לגרסה, למערכת ההפעלה, ליצרן (יש הלא חבילות של כמה יצרנים, לא רק לסאן). ההתנהגות כמעט זהה עבור התנהגות תכנית הג'אווה ("כמעט" זה לא 100% אבל קרוב לזה). שינוי קונטקסט, הוא דבר זול ויעיל.עבודה ממש יעילה ונכונה עם תהליכונים, דורשת עדיין מחשבה לפעמים (אם ישנן אינטראקציות מורכבות בין תהליכונים שונים) אבל השפה עצמה בנויה ממש טוב ואלגנטי לצורך העניין.
 
למעלה