فرض کنید ما چهارتا node داریم و یکی از نودها به سه تای دیگه قراره داده بفرسته. مثلا قراره اعداد 1 تا ایکس رو بفرسته ! آیا راهی برای اینکه بشه این فرستادن عادلانه باشه هست؟
تو کامپیوتر خودم دوسه تا راه رفتم اما یکی از نودها در عرض ۳۰ ثانیه کل داده رو میگیره در صفحه چاپ میکنه اما اون ۲ تای دیگه درست ۱۰ دقیقه طول میکشه ! دلیلش به خاطر سیستم عامله که به یک نود منابع بیشتری میده؟ یا در خود الکسیر داده فرستادن رو از نود اول شروع میکنه تا برسه به سومی؟
اگر چندتا کامپیوتر واقعی رو کلاستر کنم فرضا آیا در اونها هم همچین اتفاقی خواهد افتاد؟ اگر خواهد افتاد راهی هست که بشه عدالت برقرار کرد؟
بله متوجه شدم! فقط چیزی که من میخوام اینه که فرضا اگر یک دیتا رو به طور عادلانه بخش بخش کردیم برای هر نود! چطوری میشه اینها رو عادلانه فرستاد؟ مثلا دیگه اول داده نود اول رو نفرسته بعد سراغ بعدی بلکه عادلانه بفرسته. مثلا اگر ده تا به نود اول داده میفرسته از هزارتا. ده تا هم به نود دوم و سوم و… بفرسته همزمان
پس عذر میخوام لطفا ادامه رو توضیح بدید من فکر کردم شما منظور منو اشتباه گرفتین بازم شرمنده
یکی هم لطفا توضیح بدین چرا باقی مانده ها رو گرفتین منظورم x % 3 هست
حالا هر داده که داریم میخواهیم به صورت عادلانه به یک نود بفرستیم
برای این کار باید با یک الگوریتم hash داده به یک عدد تبدیل کنیم مثلا داده “کتاب” تبدیل بشه به ۱۲۳۴
حالا باقی مانده ۱۲۳۴ با تعداد کل نود ها که داریم تو لیست میگیریم مثلا ۳ تا نود
scala> 1234 % 3
res8: Int = 1
بخاطر اینکه جواب ۱ هستش از لیست نود با ایندکس ۱ برمیگردونیم و داده به اون نود میفرستیم
هیستوری داره میتونی ببینی!، بیشتر سعی میکنم اشتباهات کوچک رو درست کنم که پست ها بهتر باشه. در مورد اون پست شما که درست کردم حذف فاصله خالی بین کاما، نقطه، علامت سوال و غیره با حروف و کلمات بود که قوانین نوشتاری رعایت بشه. کلا این مورد یک اشتباه کوچک هست که رایج بودنش یکمی عجیبه و جالبه بدونی که قدیما انقدر فراگیر نبود. مورد دیگه ای که خیلی زیاد شده استفاده از ه در جاهایه که اصلا نباید باشه، مثلا؛ کتابه برنامه نویسی🤕، بنظر میاد کفگیر در همه زمینه ها حسابی به ته دیگ خورده🥶
در مجموع بیکاری هم خوب چیزیه، آدم راه میوفته توی سایتا و فاصله حذف میکنه
البته مدل فرستادن شما هم اشتباهه، همزمان ارسال نمیکنه
اینجوری مثلا میشه همزمان
for i <- nodes do
spawn fn ->
for j <- 1..500000 do
send i,j
end
end
end
اینجوری برای هر نود یه پروسه ایجاد میشه که کار ارسال عدد رو جدا و همزمان با بقیه انجام میده.
میتونید کار ارسال اعداد رو هم به پروسه های کوچکتری تقسیم کنید، مثلا هر ۱۰۰۰۰۰ تا رو با یه پروسه انجام بدید که کدش رو به عنوان کار در منزل جلسه بعدی بیارید
ویرایش:
نکتههایی که مطرح شده در تاپیک، مربوط به این میشن که شما بخوای ۵۰۰۰۰۰ تا رو بین ۳ تا نود تقسیم کنی، در حالی که شما داری به هر نود ۵۰۰۰۰۰ تا میفرستی. شاید سوالتون رو بهتر مطرح کنید بهتر باشه.
من اصلا متوجه نشدم که یک range هاردکد شده و ثابت اینجا به چه کاری میاد، بنظر منم بهتره سوال جوری عنوان بشه که حداقل تا حدی شرایط منطقی رو شبیه سازی کنه.