تضخم البرامج من حيث موارد المعالج - لماذا تكون الإصدارات الأحدث من التطبيق أبطأ كثيرًا من الإصدارات القديمة؟

مقدمة


كانت ليلة الخميس العادية. لقد عدت من العمل ، وجلست على الكمبيوتر المحمول ، وقمت بتشغيله ، وبدأت في تشغيل Skype وبدأت في الانتظار بشكل اعتيادي حتى يتم التمهيد بالكامل تمامًا. ثم فكرت فجأة - لماذا استغرق تحميلها وقتًا طويلاً ، ومن الواضح أن النظام يصعب تحمل هذه العملية؟

قررت النظر في إدارة المهام لتقدير مقدار الموارد التي يستهلكها Skype في الخلفية. لكن أولاً ، بعض الحسابات الأولية. وكم يجب أن يستهلك هذا الموارد؟ أنا أتحدث عن الخلفية الآن. أولئك. عندما لا يكون هناك اتصال فيديو ، لا أتحدث حتى مع الميكروفون مع أي شخص. كل هذا هو قائمة جهات الاتصال ، التي يتم عرضها في شكل رموز وأسماء ، وقائمة يمكنك فيها اختيار شيء ما.

أولئك. هذا شكل واحد ، في الواقع ، يمكنك من خلاله إطلاق قوائم إضافية. هناك قائمة واحدة في هذا النموذج. ومربع نص لإدخال الرسائل إلى شخص ما ، بضعة أزرار. منذ حوالي 15 عامًا ، عندما كتبت في دلفي ، سيزن مثل هذا الطلب (مع نموذج واحد) بضع مئات من الكيلوبايت. بالطبع ، منذ ذلك الحين بدأت بيئة التطوير تستهلك المزيد من الموارد ، أصبحت المكونات المرئية أكثر ثراء. ومع ذلك ، حتى مع هذا التقدم ، يجب أن تزن Skype في الخلفية في مكان ما حوالي 10 ميغابايت كحد أقصى. بعد كل شيء ، أنا لا أتحدث إلى أي شخص أو أتصل به ، فماذا يمكنني أن أنفق الكثير هناك؟

يمكنك النظر إلى هذه المسألة ، ومن ناحية أخرى ، كما يقول علماء الرياضيات ، التكافؤ. بدون مكالمات الفيديو ومحادثات الميكروفون ، يوفر Skype فرصة لمعرفة أي من المحاورين موجود حاليًا على الشبكة ، بالإضافة إلى إرسال رسالة نصية إليه جيدًا ، وتلقي رسالة نصية ردًا من شخص ما. أولئك. هذا هو ICQ أساسًا - لذا ، حسنًا ، ربما في الخلفية ، على الأرجح ، هل يجب على Skype أن تستهلك حوالي ICQ في الذاكرة؟ الآن دعونا نتحقق من هذه الحسابات. نحن ننظر إلى استهلاك الذاكرة في TaskManager:

image

هل تستهلك Skype ذاكرة 158 ميجابايت؟ هل أنت جاد بالنظر إلى أن QIP هو 35 ميغابايت؟ حسنًا ، ربما تكون 35 ميغابايت كثيرة جدًا ، ويجب تسوية ذلك ، لكن ملاحظتي ليست حول ذلك. نحن الآن بصدد Skype. لماذا يستغرق الكثير من الموارد - ما يقرب من 5 أضعاف QIP؟ إنه كثير جدًا لنموذج واحد يحتوي على قائمة بجهات الاتصال ، أليس كذلك؟

ومن المثير للاهتمام ، أن هذه المشكلة لا تثيرني فقط ، إذا كنت تقود إلى Google " لماذا تستهلك Skype الكثير من الذاكرة " ، فعندئذٍ ستنسحب مجموعة كبيرة من المناقشات المختلفة في المنتديات ، لماذا تزن الإصدارات الجديدة من Skype الكثير. الإجابات ممتعة بشكل خاص. على سبيل المثال ، إجابة حقيقية على منتدى مجتمع Skype (أقتبس الترجمة المجانية للإجابة):

, ? 4-8 . 140 , .


نعم. بالطبع بكل تأكيد. إذا كان الأمر كذلك ، فإن جميع مطوري البرامج سيعقلون ، فبهذه الطريقة " لا يوجد فولوستس كافية ." السؤال ليس أنني آسف لذاكرة Skype (وأنا آسف أيضًا). السؤال هو ، ما هو الجديد في الوظائف المضافة في الإصدارات الجديدة من Skype (مقارنة بالإصدارات القديمة) ، والتي تتطلب الكثير من الذاكرة؟

لكن لا بأس ، لقد كنت مهتمًا أكثر بسؤال آخر - المعالج الذي يوجد في Skype أيضًا في الخلفية لم يسترخي حقًا وأظهر بشكل دوري حتى حمولة كاملة. السؤال الذي يطرح نفسه "لماذا وكيف نتخلص من هذا؟". في الواقع ، يجب أن يبدو السؤال هكذا - كيف يتمكن المطورون من إنشاء مثل هذه التطبيقات الضخمة؟ وماذا تفعل به؟

القليل من التاريخ


بالطبع ، ربما سمع أي زائر لهذا الموقع مرة واحدة على الأقل عن قانون مور بشأن تحسين أداء النظام. المقال غداء مجاني قد انتهى يوفر صورة غريبة:

image

كما ترون ، في مكان ما في عام 2004 ، وصلت المعالجات إلى السقف من حيث تردد الساعة. وفي السنوات العشر الماضية ، لا ينمو هذا التردد بشكل خاص. هل يترتب على ذلك أن قانون مور قد توقف عن الوفاء به؟ في الواقع ، لا ، وتوضح المقالة بوضوح ووضوح السبب. ببساطة ، ينمو أداء أجهزة الكمبيوتر لدينا الآن بسبب عوامل أخرى (ذاكرة التخزين المؤقت ومتعدد النوى). لكن المشكلة هي أن التطبيقات العادية ذات الخيوط الواحدة لن تكون قادرة على تسريع هذه العوامل. وهنا تكمن المشكلة. والحقيقة هي أن العديد من الشركات المصنعة للبرامج تتصرف اليوم كما لو أن الفناء لا يزال في الثمانينيات أو التسعينيات ، وتحسين البرامج من حيث تقليل عدد دورات الساعة لا يمثل مشكلة معينة - يمكنك الانتظار قليلاً وسوف تقوم المعالجات أسرع بكثير.

هذا صحيح ليس فقط لمايكروسوفت ، لكني سأركز على أمثلة محددة لها. يذكر جويل سبولسكي في مقاله أن Microsoft تمكنت من التغلب على Lotus في الثمانينيات في المعركة بين Excel و 123 بسبب حقيقة أن مديري Lotus ارتكبوا خطأ فادحًا - حاولوا تحسين التطبيق. على وجه التحديد ، حاولوا تقليص التطبيق بحيث يضمن دائمًا احتواءه في 640 كيلوبايت من ذاكرة الوصول العشوائي. قاموا بقتلها لمدة عام ونصف ، وخلال هذا الوقت استولى ريدموند على السوق باستخدام Excel ، حيث كانت أجهزة الكمبيوتر ذات الكميات الأكبر من ذاكرة الوصول العشوائي قيد التشغيل في تلك اللحظة. يكلف هذا الحل لوتس الكثير.

ومع ذلك ، إليك ما هو مثير للاهتمام - في هذه الأيام ، ربما تتحول مثل هذه الاستراتيجية إلى فوز - لأن موارد أنظمة سطح المكتب القياسية لم تعد تنمو بوتيرة مذهلة مثل 20-30 عامًا. المشكلة هي أنه نتيجة المنافسة الشديدة في تلك الفترة ، كانت الشركات التي طورت وظائف التطبيقات هي الرابحة ، بينما تجاهلت الأداء والتحسين. هذه الشركات هي التي شكلت إيديولوجية التطوير هذه ، التي ما زلنا نحصد ثمارها.

التضخم


إلى ماذا أدى هذا؟ لظاهرة غريبة جدا. لن أتخلى أبدًا عن ترقيات الأجهزة ، ولكن فجأة بدأت في تجنب ترقيات البرامج دون داعٍ ، بسبب التضخم المحتمل . أعني بهذا المصطلح أن نفس المجموعة الوظيفية التي كانت لدي في الإصدار القديم ، في الإصدار الجديد ، أحصل على سعر رائع من حيث موارد المعالج وذاكرة الوصول العشوائي.

هناك لغة ثابتة في اللغة الإنجليزية ، والتي تبدو بالروسية وكأنها "تحاول إصلاح شيء لم يتم كسره". إن حالة البرامج على مدى السنوات العشر الماضية تذكرنا بهذا المصطلح. سكايب هو أحد الأمثلة الرئيسية على ذلك. إذا حكمنا من خلال المنتديات ، فإن مشكلة الذاكرة هذه لم تكن موجودة في الإصدارات القديمة من Skype ، على سبيل المثال ، في الإصدارات 3.x. ما الذي تم تحسينه في المنتج منذ ذلك الحين بحيث أصبح مكلفًا للغاية من حيث ذاكرة الوصول العشوائي؟

الشيء نفسه ، بالمناسبة ، ينطبق على تطبيقات الدردشة المختلفة. منذ حوالي 15 عامًا ، كانت الدردشة ، التي تستهلك 30 ميغابايت من ذاكرة الوصول العشوائي في وقت واحد ، تبدو وكأنها هراء. ومع ذلك ، الآن هذا هو المعيار بالفعل ، على الرغم من ما توفره لنا غرف الدردشة الحالية ، والتي لم يتم توفيرها في ذلك الوقت؟

لا تنس مايكروسوفت أوفيس. في رأيي ، الإصدار ل XP أرضى الجميع. بالطبع ، مثل أي منتج ، كان له عيوبه. ولكن هل كانت حاسمة لدرجة أنهم كانوا بحاجة إلى إصدار الإصدارات 2007 ، 2010 ، وما إلى ذلك؟ أقوم بعمل نفس المستندات فيها ، ولكن الآن يجب أن أنتظر لفترة أطول حتى يتم تشغيل هذه الأنظمة.

في التبرير ، نسمع أن الإصدارات الجديدة تحتوي على ميزات جديدة. نعم ، أنا لا أنكر ذلك ، لكن ألا يبدو من الغريب أن القيام بالفرص القديمة يتطلب المزيد من الموارد؟

النموذجية والتحسين


ومع ذلك ، لماذا المزيد من الموارد؟ هنا يتم تفسير كل شيء من خلال حقيقة أن معظم التطبيقات متجانسة إلى حد ما. لا ، من حيث تنظيم المدونة ، ربما يتم تقسيمها إلى وحدات مع التقسيم الصحيح للمسؤولية. ومع ذلك ، فإنني أسميها متجانسة بمعنى أنه عند تحميل تطبيق ، يتم تحميل جميع وحداته عادة على الفور ، على الرغم من أن هذا غير مطلوب في كثير من الأحيان.

سنعود مرة أخرى إلى سكايب. من الواضح الآن أنه تم إجراء ذلك بحيث مع تسجيل دخول بسيط ، يتم تحميل الكثير من الوحدات على الفور في ذاكرة الوصول العشوائي ، والتي تكون مسؤولة بشكل مباشر عن الصوت والفيديو وما إلى ذلك. هذا على الرغم من حقيقة أن الإدخال المعتاد لا يتطلب سوى قائمة المستخدمين والقدرة على تبادل النص. يمكن القيام بهذا النظام بشكل مختلف ، فقط تحميل الأكثر ضرورة. وفقط عندما يريد المستخدم بدء تبادل فيديو ، يتم تحميل كل شيء آخر.

التحسين مهم أيضًا ، نظرًا لأن المطورين لا يمكنهم تطوير جميع التعليمات البرمجية "من الصفر" ، ولكنهم يضطرون إلى استخدام المكتبات الحالية التي تمت كتابتها دون ضغط كبير على التحسين.

تخيل أن مطور كل مكتبة جعل مكتبته أبطأ بنسبة 5 ٪ مما كان يمكن أن يكون عليه لو أنه بذل جهودًا إضافية في التحسين. دع المكتبة 1 تستخدم المكتبة 2 في عملها ، وهذه المكتبة 3 ، وتلك المكتبة 4. في هذه الحالة ، تحصل سلسلة من 15 مكتبة في حالة تراكم التأخير على النتيجة 1.05 ^ 15 = 2.07 ، أي في أسوأ الحالات ، سيتم تشغيل التطبيق مرتين بطيئة مثل أي من المكونات.

أنا على دراية جيدة بعبارة أن التحسين المبكر هو أصل كل الشر. ومع ذلك ، هذا تحسين سابق لأوانه ، وليس تحسينًا على الإطلاق. كان هذا الشعار رائعاً في وقت كانت فيه المعالجات أسرع وأسرع أمام أعيننا. بعد الوصول إلى السقف ، يبدأ هذا الشعار في الانعطاف بشكل جانبي ، عندما يبدأ الإصدار القديم من التطبيق ، المكتوب منذ حوالي 15 عامًا ، فجأة في الظهور بشكل أفضل من الإصدار الذي تم إصداره الأسبوع الماضي. بالمناسبة ، لا يسع المرء إلا أن يلاحظ حقيقة أن الشركات المصنعة للبرامج غالبًا ما تحاول إجبار المستخدمين على تحديث البرامج ، على وجه التحديد لأنه لا توجد دوافع خاصة لصالح المستهلك في هذه الحالة.

أمثلة بديلة


من حيث المبدأ ، تتوقع صناعة البرمجيات نفس صناعة السيارات بعد أزمة النفط في السبعينيات ، عندما أصبح من الواضح أن البنزين أصبح موردًا باهظ التكلفة. منذ ذلك الحين ، تمكنت شركات السيارات من تقليل استهلاك المحرك بنحو الثلث ، إذا لم أكن مخطئًا.

في عالم البرمجيات ، هناك أيضًا مثل هذه الأمثلة. في وقت من الأوقات ، أحببت حقًا Erlang ، الذي بني على مفهوم العديد من العمليات المستقلة خفيفة الوزن التي توحدها فقط الرسائل الشائعة (وهذا يسمح لك بزيادة استخدام multicore). بالإضافة إلى ذلك ، هناك مبدأ في هذه البيئة تم استعارته بشكل صريح من مترجمي LISP - وهو أنه يمكن تحميل كل وحدة ووظيفة وإعادة تحميلها أثناء التنقل إذا لزم الأمر (وينطبق الشيء نفسه على أي عملية).

للمقارنة ، في Glassfish ، إذا قمت بتغيير واحد من عدة مئات أو آلاف من الفئات ، فأنت بحاجة إلى إعادة تثبيت الوحدة النمطية بالكامل (war / ear / jar). هناك تبديل سريع للوظائف أو الفصول أثناء التنقل ، ولكن يتم تنفيذها بشكل سيئ جدًا مقارنةً بـ Erlang.

مستقبل الصناعة يكمن في التطبيقات التي يمكنها الاستفادة بشكل كامل من تكنولوجيا متعددة النواة ولا تقوم بتنزيل جميع الوحدات الممكنة على الفور لجميع الميزات الموجودة في هذا المنتج. أولئك. سيكون البرنامج قادرًا على التحميل في التكوين الأساسي ويستهلك العديد من الموارد التي استهلكها سلفه قبل 15 عامًا ، وإذا لزم الأمر ، قم بتنزيل كل ما يحتاجه المستخدم أثناء التنقل.

All Articles