تاخیر ها در برنامه نویسی

-
-

توی برنامه نویسی یک سری از زمان ها هستند که شما به عنوان کسی که دارید برنامه می نویسید، باید از اونها اطلاع داشته باشید

(این اعداد خیلی دقیق نیستند اما برای مطاله کردن منبع خوبی میتونه باشه )


کار انجام شده=============================زمان تاخیر
ارجاع حافظه کش (L1)---------------------------------------------0.5نانو ثانیه
پیش بینی شاخه اشتباه--------------------------------------------- 5 نانوثانیه
ارجاع حافظه کش (L2) --------------------------------------------- 7 نانو ثانیه
قفل کردن/بازکردن (mutex) -------------------------------------- 17 نانوثانیه
ارجاع ( RAM ) -------------------------------------------------------- 100 نانوثانیه
+فشرده کردن یک فایل 1 کیلوبایتی با(zippy) ------- 2000نانو ثانیه (2میکروثانیه)
ارسال 2 کیلوبایت داده با سرعت 1 گیگابیت بر ثانیه ------- 88000 نانو ثانیه (88میکروثانیه)
خواندن تصادفی (SSD) --------------------------------------------- 160000نانوثانیه(160میکروثانیه)
خواندن یک مگابایت پشت سر هم از (RAM) --------------- 5000نانوثانیه(5 میکروثانیه)
زمان رفت و برگشت از یک مرکز داده --------------------------- 500000 نانوثانیه(500 میکرو ثانیه)
خواندن 1 مگابایت داده پشت سر هم از(SSD)------------- 78000نانوثانیه(78 میکرو ثانیه)
تغییر مکان اشاره گر (HDD)------------------------------------- 3000000نانوثانیه(3 میلی ثانیه)
خواندن یک مگابایت از داده پشت سر هم از (HDD)----- 10000000نانوثانیه(1 میلی ثانیه)
رفت و برگشت یک بسته داده از کانادا به هلند------------ 150000000نانوثانیه(150 میلی ثانیه)

  • اگر فرض کنیم که SSD با سرعت 1گیگابایت بر ثانیه(1GB/s) داریم :
اطلاعات مربوط به سال 2018 است
اطلاعات مربوط به سال 2018 است


حالا برای اینکه این اعداد رو بهتر متوجه بشید، میایم اونا رو در 500 میلیون ضرب میکنیم و شباهتشون رو به وقایع حقیقی دور و برمون ببینیم:

در ابعاد دقیقه:

ارجاع حافظه کش (L1) -------------------- 0.5 ثانیه --------------- یک ضربان قلب
پیش بینی شاخه اشتباه ------------------- 1.5 ثانیه--------------- خمیازه کوتاه
ارجاع حافظه کش (L2) ---------------------- 2ثانیه ---------------- باز کردن در رانی (:))
قفل کردن/بازکردن (mutex) --------------- 34 ثانیه -------------- بوت شدن(بالاآمدن) یک تلفن همراه

در ابعاد ساعت:

ارجاع ( RAM )------------------------------------------ 500 ثانیه ----------- بالا آمدن ویندوز 10 با Hdd (خیلی طول میکشه)
زمان رفت و برگشت از یک مرکز داده------------- 0.27 ساعت ---------- انجام ورزش روزانه
خواندن یک مگابایت پشت سر هم از (RAM)---- 45 دقیقه ----------- یک سری fifa بازی کردن با رفقا
ارسال 2 کیلوبایت داده با سرعت (1Gb/s)-------- 5.09 روز ------------ یک هفته کاری در ایران78

در ابعاد روز:

فشرده کردن یک فایل 1 کیلوبایتی با(zippy) ------ 2.7ساعت ---------- یک سفر هوایی از اروپا به خاورمیانه
خواندن 1 مگابایت داده پشت سر هم از(SSD)---- 10.8ساعت--------- سفر از اصفهان به بندرعباس
ارسال 2 کیلوبایت داده با سرعت(1Gb/s) ----------- 12ساعت----------- نصف روز
خواندن تصادفی (SSD)----------------------------------- 22ساعت------------دو ساعت کمتر از یک روز کامل

در ابعاد هفته :

زمان رفت و برگشت از یک مرکز داده -------------------- 2.9 روز ------------ یک اردوی مشهد
خواندن یک مگابایت از داده پشت سر هم از (HDD)----- 5.74 روز -------- یک هفته کاری

در ابعاد ماه

تغییر مکان اشاره گر (HDD) ---------------------------- 2.48 هفته------- فاصله بین دو ترم دانشگاهی

در ابعاد سال:

رفت و برگشت یک بسته داده از کانادا به هلند-------- 2.4 سال-------------- اتمام دوره کاردانی یا کارشناسی ناپیوسته


با توجه به چیزی که دیدید، وقتی که قصد بهینه کردن سرعت اجرای یک برنامه رو دارید، بهتره روی مورد هایی تمرکز کنید که بیشترین تاثیر و تاخیر رو دارن.

منابع :

https://colin-scott.github.io/personal_website/research/interactive_latency.html

https://gist.github.com/hellerbarde/2843375#minute