ماهان شبکه ایرانیان

آیا اندروید به رم بیشتری در قیاس با iOS نیاز دارد؟

اگر به مشخصات هر نسل از آیفون دقت نمایید و آن را با امکانات یکی از پرچمداران اندرویدی همان سال مقایسه کنید، متوجه خواهید شد که آیفون همواره از رم کمتری بهره می گیرد.

آیا اندروید به رم بیشتری در قیاس با iOS نیاز دارد؟

اگر به مشخصات هر نسل از آیفون دقت نمایید و آن را با امکانات یکی از پرچمداران اندرویدی همان سال مقایسه کنید، متوجه خواهید شد که آیفون همواره از رم کمتری بهره می گیرد.

با در نظر داشتن همین مساله، بسیاری بر این باورند که اپلیکیشن های مبتنی بر iOS به مموری کمتری در قیاس با اپ های اندرویدی نیاز دارند و موبایل های اندرویدی صرفا به خاطر اپلیکیشن هایشان همراه با حجم بالاتری از رم وارد بازار می شوند. سوال اینجاست: آیا اندروید به مموری بیشتری در قیاس با iOS نیاز دارد؟

رم

اولین نکته ای که باید اشاره کنیم این است که در اینجا ما در مورد حافظه تصادفی یا رم صحبت می کنیم؛ منظور همان حافظه ایست که چیپست موبایل برای نگهداری و اجرای اپلیکیشن ها مورد استفاده قرار می دهد. لذا این مبحث به حافظه داخلی که گاهی اوقات هم از آن تحت عنوان «مموری» یاد می شود [چون از فلش مموری در ساخت آن استفاده می گردد] مربوط نمی شود.

در این بخش نگاهی خواهیم انداخت به میزان رم مورد استفاده در موبایل های سامسونگ، اپل، ال جی و نکسوس.

همانطور که مشاهده می کنید آیفون همواره رم کمتری در قیاس با رقبای اندرویدی اش داشته است و تنها استثنا در اینجا نکسوس 5 اکس است که درست مانند آیفون 6 اس همراه با دو گیگابایت رم به بازار عرضه شده.

تصور عموم این است که آیفون در ازای ارائه تجربه کاربری بهتر یا حتی برابر با محصولات اندرویدی از رم کمتری استفاده می کند. البته در فضای وب توضیحات مختلفی برای این موضوع مطرح شده که در اغلب شان حرف از جاوا به میان آمده؛ در واقع استدلال برخی صاحب نظران این است که اندروید به خاطر بازیافت حافظه جاوا و منابع بیش از حدی که به آن اختصاص می یابد (سربار جاوا) به رم بیشتری نیاز دارد. در ادامه قصد داریم توضیحاتی را در خصوص نادرست بودن این باور برایتان ارائه نماییم.

رم آزاد چیست؟

مدیریت حافظه در یک دستگاه رایانشی مدرن (شامل پی سی، لپ تاپ، تبلت یا اسمارت فون) فرایند پیچیده ای است. در دوران قدیم، کامپیوترها معمولا حجم مشخصی رم داشتنند که بخشی از آن به سیستم عامل و بخش دیگر به برنامه های اجرایی و دیتای مربوط به آنها اختصاص می یافت.

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

این یعنی در اندروید و iOS، مقداری از رم به سیستم عامل اختصاص می یابد و بخش هایی از آن نیز (که صفحه خوانده می شوند) در اختیار اپلیکیشن های مختلف قرار می گیرند. به این ترتیب، هر رمی که اِشغال نشود آزاد به حساب می آید.

نکته ای که وجود دارد این است که اگر رم اشغال نشده ای داشته باشید، سیستم از کل ظرفیت های خود استفاده نمی کند و این مساله ابدا خوب نیست. برای نمونه کلیه داده های ورودی و خروجی با استفاده از حافظه نهان بهبود پیدا می کنند. البته ذخیره شدن این دیتا در کش به نوبه خود از اهمیت بالایی برخوردار است اما نمی توان این اهمیت را با اجرای اپلیکیشن ها برابر دانست.

در هر حال سیستم عامل می تواند بخشی از رم آزاد خود را به این موضوع اختصاص دهد. در مرحله بعد، چنانچه به رم بیشتری از ناحیه یکی از اپلیکیشن ها نیاز بود، آنگاه کش شدن دیتا به درجه دوم اولویت انتقال داده می شود و حافظه به اپلیکیشن مربوطه اختصاص می یابد.

البته سیستم عامل انجام کلیه این امور را بر عهده می گیرد. نکته مهم دیگری که باید به آن اشاره شود اینکه در یک سیستم عامل مطلوب به ندرت رم آزاد وجود دارد هرچند که «رم قابل دسترس» در آن خواهد بود؛ منظور رمی است که توسط بخش های دیگر مورد استفاده قرار دارد اما می توان بلافاصله آن را تغییر کاربری داد.

درست وقتی که قدم به این محیط ناشناخته گذاشتید و از رم خود برای انجام امور دیگری غیر از اجرای اپلیکیشن ها بهره گرفتید، به سرعت متوجه عمق ماجرا می شوید. سیستم عامل های مدرن نظیر اندروید و iOS از هر تدبیری برای استفاده مجدد از رم اشغال نشده بهره می گیرند و نتیجه به کار گیری این ترفندها می شود دایره ای از لغاط مختلف در مورد مدیریت حافظه که از فعال، غیرفعال، آلوده، آزاد، بافر، کش و غیره را شامل می شود.

نکته اینجاست: میزان رم آزاد اهمیتی ندارد و آنچه به کارتان می آید رم در دسترس است؛ یعنی همان رمی که از فرایند کم اهمیت کش شدن به تسک مهم تر اجرای اپلیکیشن ها اختصاص می یابد.

آیا اندروید نسبت به iOS از رم بیشتری استفاده می کند؟ برای این منظور نویسنده این مطلب یک دستگاه آیفون 7 و نکسوس 5 اکس را ریبوت کرده و در پایان متوجه شده که آیفون 730 مگابایت مموری قابل دسترس دارد در حالی که این رقم برای دستگاه اندرویدی برابر با 840 مگابایت بوده است. این یعنی اندروید حدودا 100 مگابایت کمتر از iOS مموری استفاده می کند.

Resident Set Size

درست همانطور که رم آزاد با رم قابل دسترس فرق دارد، حجم مجازی یک برنامه نیز با حجم واقعی آن فرق می کند. تصور کنید اپلیکیشنی برای بارگذاری یک تصویر از روی دیسک، خواستار تخصیص یک مگابایت حافظه شود و همزمان با ارائه این درخواست، حجم مجازی اپلیکیشن ها نیز زیاد شود. با این حال، تا به اینجای کار سیستم عامل هیچگونه رم فیزیکی را به اپلیکیشن تخصیص نمی دهد.

بنابراین میزان رم فیزیکی واقعی مورد استفاده توسط اپلیکیشن زیاد نمی شود و وقتی اپلیکیشن فایل مورد نظرش را می خواند و شروع به نوشتن آن روی مموری می کند، سیستم عامل مقداری حافظه فیزیکی را به آن اختصاص خواهد داد. اگر تنها نیمی از مموری درخواست شده استفاده گردد، آنگاه شاید سیستم عامل یک مگابایت کامل از رم فیزیکی را به آن اختصاص ندهد و مقدار کمتری را در اختیار آن بگذارد.

رم فیزیکی که در اصل توسط یک اپلیکیشن اشغال می شود حجم مجموعه مقیم (Resident Set Size) یا به اختصار RSS خوانده می شود و مقیاس خوبی برای اندازه گیری مقدار رم مورد نیاز اپلیکیشن های مختلف برای اجرا محسوب می گردد.

خوشبختانه با استفاده از ابزارهای مختلف توسعه روی اندروید و iOS می توان فهرستی از اپلیکیشن های این دو پلتفرم را به همراه حجم مقیم شان به دست آورد.

برای بررسی این نظریه که اپلیکیشن های اندرویدی نسبت به انواع مبتنی بر iOS از مموری بیشتری استفاده می کنند یا خیر مجموعه ای از بازی ها و اپلیکیشن های اداری روی دو دستگاه بهره مند از آنها نصب شد تا RSS آنها در زمان اجرا مشخص شود. در هر دو مورد نیز اطمینان حاصل شد که اپلیکیشن ها نخست در حال اجرا باشند و دوم آنکه فعالیت مفیدی را انجام دهند. نتایج به شرح زیر هستند:

همانطور که مشاهده می کنید نتایج متفاوت هستند. اپلیکیشن Crossy Road در اندروید به 383 مگابایت برای اجرا نیاز دارد در حالی که در iOS رم مورد نیازش برابر با 308 مگابایت است. در مقابل اما، بازی Temple Run 2 در اندروید 211 مگابایت از مموری را به خود اختصاص می دهد اما در iOS این رقم برابر با 364 مگابایت است.

به طور کلی می توان اینطور نتیجه گرفت که اپلیکیشن های اندرویدی تنها اندکی بیشتر از اپ های ساخته شده برای iOS از مموری استفاده می کنند (حدود 6 درصد). با این همه باز هم نمی توان گفت که اپ های iOS نصف حجم همتایان اندرویدی خود را دارند.

همچنین لازم به یادآوری است که هیچکدام از اپ های تست شده روی اندروید و iOS بیشتر از 400 مگابایت از مموری را استفاده نمی کردند، هرچند که بی تردید اپلیکیشن هایی با حجم بالاتر از موارد تست شده نیز وجود دارند.

در هر حال مساله اینجاست که برای اجرای هر اپلیکیشنی روی این دو سیستم عامل نیازی به 4 گیگابایت رم پیدا نخواهید کرد چراکه دستگاه های مبتنی بر هر دوی آنها با بیش از 700 مگابایت رم قابل دسترس بوت می شوند و در نتیجه بازی هایی مانند Crossy Road و Temple Run بدون هیچ دردسری روی آنها اجرا می شوند.

اجرا در پس زمینه و پیش زمینه

مقادیر RSS عنوان شده در این بخش به اپلیکیشن هایی مربوط می شوند که در صفحه اصلی یا پیش زمینه اجرا می شوند؛ اپ هایی که در واقعیت در حال اجرا هستند و کاربر با آنها تعامل دارد. اما هم در iOS و هم اندروید، این احتمال وجود دارد که برای انجام کاری دیگر، اپلیکیشنی که مشغول کار با آن هستید را به حال خود رها کنید تا بعدا به سراغش بروید. به این ترتیب، آن اپلیکیشن به پس زمینه انتقال می یابد و اینجاست که محاسبات شکل دیگری به خود می گیرند.

نکته کلیدی در اینجا تجربه کاربری است. اگر از جیمیل استفاده کنید، برای مدتی پای یک بازی بنشینید و بعد از اندک زمانی مجددا به سراغ جیمیل بروید احتمالا انتظارتان این است که جیمیل درست مانند همان زمانی رفتار کند که آن را ترک کرده بودید. سوال اینجاست: اگر بعد از یک هفته به سراغ بازی رفتید، باید در چه وضعیتی باشد؟ به همان حالتی که آن را رها کرده بودید یا کاملا بسته؟

طبق ارقامی که در بالا به آنها اشاره کردیم، اگر از اپلیکیشن ورد مایکروسافت استفاده نمایید و سپس به سراغ Crossy Road بروید و باز با ورد کار کنید و بعد هم Temple Run 2 را اجرا نمایید، موبایل شما به حدود 750 مگابایت رم قابل دسترس نیاز دارد.

همین موضوع در مورد آیفون 7 و نکسوس 5 اکس مطرح می شود. اگر در زمان اجرای یکی از اپ هایی که در بالا اشاره شده بخواهید به سراغ دیگری بروید آنگاه مموری باید تمام اپ های باز را در پس زمینه نگه دارد و همزمان اپلیکیشن جدید را هم باز کند که برای انجام این امور به رم بیشتری نسبت به مقدار قابل دسترس خود نیاز خواهد داشت. پس چه اتفاقی می افتد؟

اولویت سیستم عامل بارگذاری و اجرای اپلیکیشن جدید است اما مموری قابل دسترس همواره به میزان کافی وجود ندارد. بنابراین لازم است که کاری انجام بگیرد. در سیستم های دسکتاپی و سروری اتفاقی که معمولا رخ می دهد این است که سیستم عامل شروع به استفاده از هارد دیسک به عنوان فضایی موقت برای ذخیره سازی صفحات حافظه اشغال شده توسط اپ های پس زمینه می کند.

این فرایند که با نام جابجایی از آن یاد می شود معموبا بسیار کند انجام می گیرد اما به لطف آن، برنامه های قدیمی تر در پس زمینه قابلیت حذف شدن از مموری اصلی و ذخیره شدن روی دیسک را پیدا می کنند. در ادامه اگر کاربر باز هم قصد اجرای یکی از برنامه های موجود در پس زمینه را داشته باشد، مجددا عمل «جابجایی» برای آن صورت می گیرد.

گفتنی است که در اندروید، عمل جابجایی با استفاده از حافظه داخلی صورت نمی گیرد زیرا سرعت های نوشتن یا همان رایت در حافظه های فلش بسیار پایین است، ضمن آنکه خطر مخدوش شدن فلش نیز وجود دارد. بنابراین لازم است که کار دیگری انجام بگیرد.

یکی از رویکردهای اتخاد شده توسط اندروید اجرای فرایندی تحت عنوان جابجایی فشرده است. در این فرایند سیستم عامل به دنبال صفحاتی می گردد که در سیستم های دسکتاپی به هارد دیسک منتقل می شوند، منتها به جای این فرایند آنها را فشرده سازی و سپس روی رم ذخیره می کند. فضایی که در نتیجه این فشرده سازی فراهم می گردد نقش رم قابل دسترس را ایفا خواهد نمود. جالب است بدانید که از زمان انتشار OS X 10.9 Mavericks، تکنیکی مشابه به این نیز توسط MacOS مورد استفاده قرار می گیرد.

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

با این همه، بار اضافه ای که بر دوش چیپست گذاشته می شود و حتی نامعلوم بودن نرخ فشرده سازی همگی ارزشش را دارند زیرا پیامدهای انجام نشدن این فرایندها بیشترند. تصور کنید اگر سیستم عامل نتواند مقدار کافی از مموری را آزاد کند، آنگاه انتخاب دیگری جز بستن یک اپلیکیشن دیگر نخواهد داشت.

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

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

در موبایل نکسوس 5 اکس، می توانید دو بازی مختلف (مثلا Crossy Road و Subway Sufers) را در مموری داشته باشید و بدون هیچ دردسری میان آنها سوئیچ کنید. با این حال، زمانی که بازی سومی را باز کنید (مثلا Temple Run 2) آنگاه یکی از دو بازی دیگر به صورت خودکار بسته می شود.

در iOS هم از همین تکنیک برای حذف اپلیکیشن ها استفاده می گردد، با این همه، طبق بررسی های مختلفی که در این باره انجام شده ظاهرا سیستم عامل موبایلی اپل از ترفندهای دیگری نیز برای این منظور بهره می گیرد. تردیدی نیست که iOS هم برای آزاد کردن رم خود اپلیکیشن ها را می بندد اما این فرایند، با تناوبی که در اندروید رخ می دهد در آن تکرار نمی شود.

در مقابل این سیستم عامل از روش مجزایی برای کم کردن RSS یک اپلیکیشن بدون بستن آن استفاده می کند. برای مثال، پیشتر مشخص شد که بازی Crossy Road به 308 مگابایت رم نیاز دارد تا برای نخستین بار گشوده شود. اما اگر این بازی به پس زمینه انتقال داده شود آنگاه RSS آن به کمتر از 10 مگابایت می رسد. لذا اپلیکیشن به کلی بسته نمی شود و وقتی بخواهید مجددا از آن استفاده نمایید برایتان مهیاست و نیازی به بارگذاری مجددش نخواهد بود.

جالب است بدانید که وقتی این بازی مجددا به پیش زمینه انتقال داده می شود RSS آن به یکباره به 100 یا حتی 200 مگابایت می رسد اما دیگر هیچگاه رقم اولیه 308 مگابایت را برای آن مشاهده نخواهید کرد.

در نتیجه وقتی همان تست اجرای چند بازی روی آیفون 7 با دو گیگابایت رم را اجرا نمایید قادر خواهید بود میان هر سه آنها سوئیچ کنید.

اینکه iOS چنین فرایندی را دقیقا چگونه انجام می دهد مشخص نیست و متاسفانه اپل نیز اطلاعات زیادی را در این رابطه در اختیار عموم قرار نمی دهد.

نتیجه گیری

با در نظر داشتن آنچه گفته شد، نه iOS به رم کمتری نسبت به اندروید نیاز دارد و نه اینکه اندروید به مموری بیشتری، بلکه iOS از ترفندها و استراتژی های بهتری برای مدیریت کردن اپلیکیشن های پس زمینه و همچنین تغییر کاربری مموری استفاده می کند.

به طور کلی اینطور به نظر می رسد که اپ های اندرویدی پس از انتقال به پس زمینه نیز از همان مقدار رم اولیه در زمان گشوده شدن استفاده می کنند. اما در iOS اپ های پس زمینه مموری کمتری را به کار می برند و سیستم عامل به درستی آنها را مدیریت می نماید.

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

در پایان می توان اینطور نتیجه گرفت که به خاطر نحوه مدیریت اپ های پس زمینه در اندروید است که شرکت های تولید کننده یک تا دو گیگابات رم بیشتر را به محصولات تولیدی شان اضافه می کنند.

قیمت بک لینک و رپورتاژ
نظرات خوانندگان نظر شما در مورد این مطلب؟
اولین فردی باشید که در مورد این مطلب نظر می دهید
ارسال نظر
پیشخوان