פרוייקט קטן שלי

nocgod

New member
פרוייקט קטן שלי

היי חבר'ה אני מפתח משהו קטן (ספריה), וחשבתי לזרוק את הקוד לציבור, אולי מישהו אפילו יזרוק לי עצם מידי פעם ויעזור.
בכל מקרה הרעיון הוא פיתוח קבוצת מחלקות אבסטרקטיות כדי שבאמצעותן ניתן יהיה לממש בקלות את ה chain of command עם כמה נימים.
בגדול אני צריך לפרוייקט אחר שלי לעשות pipeline וחשבתי שזו תהיה הדרך היותר מתאימה לעשות את זה.

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

אגב אני מנסה לממש שם את רוב העבודה עם Fluent API אז אם יש למישהו הצעות בנושא הזה גם אשמח.

https://bitbucket.org/nocgod/generic-chain-of-command-implementation
זה הריפוזיטורי, אני משתמש בmercurial, הפרוייקט הוא בjava (גרסא 7)

חג שמייח!
 

nocgod

New member
יש קצת כתף קרה...בטח בגלל החגים

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

numGen blocking 1 thread
2398ms 1 thread
1384ms 2 threads
1077ms 3 threads
950ms 4 threads
916ms 5 threads
901ms 6 threads
913ms 7 threads
935ms 8 threads

numGen non-blocking 1 thread
2313ms 1 thread
1289ms 2 threads
979ms 3 threads
895ms 4 threads
843ms 5 threads
800ms 6 threads
798ms 7 threads
796ms 8 threads


* עשיתי הרצה אחת לכל setup של נימים
* בדיקת נכונות תוצאות ביצעתי פעם אחת על ההרצה הראשונה - ראיתי שהתוצאות כפי המצופה מהחישובים

הניסוי:
שלב א - מייצר מספרים (במקרה שלי מ 1 עד 10000 כולל) ושם בoutput
שלב ב - מחשב את הפונקציה fib עבור כל מספר שיוצר בשלב א' (הoutput של שלב א הוא ה input של שלב ב)
במהלך ייצור המספרים של fib השתמשתי ב memoization כמובן (רקורסיה למספרים כאלה עושה stack overflow תוך חלקיק שניה)

שוב - אשמח לשיתוף פעולה. לא מצאתי ספריה שמביאה את השירות הזה בצורה פשוטה כמו שאני מציג/רוצה.
רוב הסיפריות בנושא שמצאתי הן דומות לרעיון אבל לא בדיוק (zeroMQ צריך להיות גאון כדי לקמפל את הbinding עבור ג'אווה, וצריך לחזור על הפעולה בכל מע' שעוברים אליה)
google pipeline API מרגיש קצת כמו overkill לדברים שצריכים pipeline פשוט שכל stage בו יכול לעבוד בצורה concurrent ובין הstages לא חייב סנכרון (תוצאה של שלב א ישר עוברת לשלב ב בעוד שלב א ממשיך לייצר תוצאות)
 
למעלה