محمد حسین حاجی وندی
محمد حسین حاجی وندی
خواندن ۲ دقیقه·۲ سال پیش

انواع ساعت در سیستم های کامپیوتری

تا حالا به مفهوم زمان یا ساعت یا تایمر در سامانه های کامپیوتری فکر کردید؟. به عنوان مثال هر عملیاتی که در یک پایگاه داده انجام می شود در یک زمان معین اتفاق می افتد.دانستن این زمان که به timestamp معروف است، برای توسعه دهندگان مهم است یا مثلا به زمانی که طول می کشد کل عملیات انجام شود زمان سپری شده (elapsed time) می گویند. فرق این ها چیست؟ در این مطلب کوتاه سعی کردم تفاوت این مفاهیم را روشن کنم.


سیستم های کامپیوتری حداقل یکی از این مدل های مختلف ساعت را دارند:

  • مدل زمان از روز (time-of-day clock)
  • مدل ساعتِ یکنواخت (monotonic clock)

در ادامه هر یک از انواع ساعت را توضیح می دهم:

مدل زمان از روز (time-of-day clock)

مدل زمان از روز یا ساعت دیواری (wall-clock time) همان چیزی است که به طور شهودی از یک ساعت انتظار دارید. این ساعت زمان حاضر را بر اساس یک تقویم برمی گرداند. برای مثال در لینوکس تابع زیر زمان epoch را برمی گرداند:

clock_gettime(CLOCK_REALTIME)

معادل آن در جاوا به صورت زیر است:

System.currentTimeMillis()

هر دو این توابع ثانیه یا میلی ثانیه از زمان epoch برمی گرداند. که در واقع یک قرارداد است و به مبدا زمانی ثانیه 0 دقیقه 0 روز اول ژانویه 1970 میلادی بر اساس UTC اشاره می کند.برخی از سیستم ها از زمان هایی با مبدا های متفاوت پشتیبانی می کنند.

مدل ساعتِ یکنواخت (monotonic clock)

این ساعت فارغ از اینکه مبدا زمانی چیست همیشه به جلو حرکت می کند علت نامگذاری آن هم همین است. این مدل ساعت برای اندازه گیری مدت زمان سپری شده مناسب است چون تضیمن شده است که همیشه به جلو حرکت می کنند.این ساعت با این هدف طراحی شده است که در یک زمان مقدار آن بررسی شود و یک کاری انجام شود و دوباره مقدار ساعت چک شود. تفاوت دو مقدار ساعت زمان سپری شده را نشان میدهد. اگرچه مقدار ساعت به تنهایی ممکن است بی معنا باشد. مثلا زمان پاسخ دهی (response time) یک سرویس را می توان با استفاده از ساعت یکنواخت بدست آورد.

در لینوکس

clock_gettime(CLOCK_MONOTONIC)

و در جاوا

System.nanoTime()

ساعت یکنواخت را برمی گردانند.




جالبه بدانید یکی از چالش های کار کردن با سیستم های توزیع شده هماهنگ کردن (Synchronization) ساعت های آن ها با هم است. بنابه تعریف ساعت یکنواخت نیازی به هماهنگ سازی ندارد اما ساعت زمان از روز باید بر اساس پروتکل NTP بین سیستم های مختلف هماهنگ شود.با این حال متاستفانه راه حل قابل اعتماد و دقیقی برای اینکار وجود ندارد و حتی استفاده از پروتکل NTPهم عدم اختلاف بین ساعت های مختلف را تضمین نمی کند!

clocktimertimestampepochزمان
مهندس نرم افزار
شاید از این پست‌ها خوشتان بیاید