קריאה לווב סרביס gmultithreadi

arik23m

New member
קריאה לווב סרביס gmultithreadi

היי
אני צריך לייצר מנגנון שיקרא נתונים מהDB נניח 200 רשומות
ואז יחלק את הנתונים לX טרדים נניח 5.
שבבכל טרד מתבצעת קריאה לווב סרביס (שליחת רשומה אחת לוווב סרביס)
אסור לי לבצע יותר מ-10 קריאות לווב סרביס בשניה
שאלתי היא:
במה כדאי להשתמש?
TASK? THREADS? חיה אחרת? פיסת קוד תתקבל בברכה
מזמן שלא עשיתי שימוש בTHREADS
שאלה שניה איך אני מוודא שלא מתבצעות יותר מ-10 קריאות בשניה כנ"ל
 

spiritus asper

New member
למה דווקא 5?

בכל מקרה, שימוש ב-Parallel.For כמספר הרשומות אמורה לעשות את העבודה. אם ממש בוער לך להגביל את מידת המקבול המקסימלית, תוכל לעשות זאת דרך ה-Overload שמקבל את את הפרמטר maxdegreeofparallelism.
הלוגיקה השניה שתצטרך לממש היא זאת שדואג שלא מבצעים יותר מ-X קריאות בשניה. במקרה הזה פשוט תצטרך לספור כמה קריאות בוצעו בשניה האחרונה, ולהמתין עם שאר הקריאות עד לשניה הבאה.
כאמור אם כל קריאה לוקחת פרק זמן מאוד קצר, יתכן שמקבל העבודה סתם יעמיס אותך (סוג של thread stampede, כולם מתעוררים כשהשניה עוברת, אבל רק אחד מהם מצליח לבצע 10 קריאות, ככה ששאר הת'רדים סתם התעוררו).
בכל אופן, צריך לחשוב על מה הולך כאן.
 
לא הגדרת הבעייה היטב, על פניו אין צורך באף אחד מהם.

סביר שאם אתה מוגבל ל-10 קריאות בשנייה, זה יהיה מיותר להשתמש במקבול בכלל.
טעות קלאסית, שכולנו עושים אם לא עוצרים לחשוב, היא להאיץ חוליות בשרשרת מעבר לאילוץ של החולייה האיטית ביותר (יעני "אופטימיזציה").
אתה רק צריך לדאוג שהקוד שלך, שעסוק באותן "קריאות לווב סרוויס", אף פעם לא ממתין רעב.
כתוב קוד סינכרוני וסע לשלום.
 

marvin2

New member
לא צריך להיות מיקבול לקריאות עצמן

אבל הקריאות עצמן צריכות להיות ASYNC + קונטר שימנע יותר מעשר קריאות לשניה.
 

marvin2

New member
קראתי ולא מצאתי את הטעות שלי

בוא ניקח את הסנריו הבא: יש לך אין סוף של קריאות לבצע בתור וכל קריאה לוקחת 200MS. איך אתה מגיע לעשר קריאות בשניה בלי קוד אסינכרוני או משולב עם טראדים ?
 
והמסקנה מהדוגמה היא? שצריך למקבל כל דבר או ש...

צריך לבדוק קודם כמה "הנחות" על התהליך?
שים לב: "סביר שלא צריך למקבל שום דבר"...
ומדוע אתה מניח שלעשות 5 קריאות בשנייה לא מספק את צרכי ה-OP? האם בדקת?
 

Admini

New member
למה אסור לך יותר מ-10 פעמים בשניה?

אם החסימה היא פר IP, אז אפשר פשוט לגשת משרת פרוקסי...
 
למעלה