مقدمة
في الآونة الأخيرة ، أقوم بوظيفة من إحصائيات الدرجات الأصلية. يقوم المستخدمون بتعيين المعلمات ذات الصلة من خلال مكتب الاستقبال ، ويعدلون في الوقت الفعلي في الخلفية وإرجاع البيانات. نسبيًا ، لا تزال هناك العديد من الوظائف الإحصائية ، لذلك دعونا نلخصها هنا.
أفضل تجربة مستخدم هي أن كل عملية يمكن أن تعرض البيانات في الوقت الفعلي. في غضون 3 ثوان ، يجب أن يكون ضمن نطاق تسامح المستخدم. لذلك ، فإن جعل المنتج لا يتطلب فقط النظر في تصميم تفاعل المستخدم ، ولكن أيضًا لا غنى عن التحسين الخلفي.
يمكنك ببساطة إلقاء نظرة على الإحصائيات الخمسة أعلاه. بشكل عام ، لا يزال هناك الكثير من الإحصاءات. أهم شيء هو أن تكون في الوقت الفعلي والوقت الفعلي والوقت الفعلي (قل أشياء مهمة ثلاث مرات). من الواضح أن مهام التوقيت غير واقعية.
قبل التحول
منطق البرنامج
تنفيذ المهام متتالية
بعد التحول
منطق البرنامج
تعدد المهام معالجة موازية
تعدد المهام المعالجة الموازية مناسبة لمنظمة المعالجة المركزية متعددة النواة. قد تكون المهام متعددة الخيوط التي تؤديها وحدات المعالجة المركزية أحادية النواة ذات نتائج عكسية (سيؤدي تبديل السياق وإنشاء مؤشرات الترابط إلى استهلاك الموارد) ، وخاصة المهام المكثفة في وحدة المعالجة المركزية.
تنفيذ الكود
رمز STATSDEMO PSEUDO:
/*: Static Static Start Time = sdf.format (تاريخ جديد ()) ؛ رميات الفراغ الثابتة العامة (سلسلة [] args) interruptedException {countDownLatch Latch = New CountDownLatch (5) ؛ // اثنين من المتسابقين Stats1 = إحصائيات جديدة ("Task A" ، 1000 ، Latch) ؛ STATS STATS2 = إحصائيات جديدة ("المهمة B" ، 2000 ، Latch) ؛ Stats Stats3 = إحصائيات جديدة ("Task C" ، 2000 ، Latch) ؛ Stats Stats4 = إحصائيات جديدة ("Task D" ، 2000 ، Latch) ؛ Stats Stats5 = إحصائيات جديدة ("Task E" ، 2000 ، Latch) ؛ STATS1.START () ؛ // المهمة A تبدأ في تنفيذ الإحصائيات. sdf.format (تاريخ جديد ())) ؛ } إحصائيات الفئة الثابتة تمتد مؤشر الترابط {String StatSname ؛ int وقت التشغيل ؛ Countdownlatch Latch ؛ الإحصائيات العامة (string statsname ، int reclime ، countDownLatch Latch) {this.statsname = statsname ؛ this.runtime = وقت التشغيل ؛ this.latch = latch ؛ } public void run () {try {system.out.println (statsname+ "do stats تبدأ في"+ starttime) ؛ // محاكاة Thise Execution Time Thread.Sleep (وقت التشغيل) ؛ system.out.println (statsname + "do atts كاملة في" + sdf.format (date ())) ؛ latch.countdown () ؛ // نهايات مهمة واحدة ، يتم تقليل العداد بواسطة واحد} catch (interruptedException e) {E.PrintStackTrace () ؛ }}}}نظرًا لأننا نريد إرجاع الإحصاءات بشكل متزامن ، فإننا نستخدم فئة CountDownlatch هنا ، وهي فئة جديدة متزامنة تمت إضافتها في Java 5. إنها بسيطة للغاية. وترد خطوات الاستخدام التفصيلية مع الإشارة إلى الرمز الزائف أعلاه.
يتم استخدام CountDownlatch لمزامنة مهمة أو أكثر ، مما يجبرهم على انتظار مجموعة من العمليات التي تقوم بها مهام أخرى لإكمالها. يتمثل الاستخدام النموذجي لـ CountDownlatch في تقسيم البرنامج إلى مهام محللة مستقلة وإنشاء خطوط العد التنازلية بقيمة N. عند اكتمال كل مهمة ، سيتم استدعاء العد التنازلي في هذا المزلاج ، وستقوم المهمة في انتظار حل المشكلة بانتظار هذه القفل وحظرها حتى تنتهي عدد المزلاج.
لتفسير رمز المصدر المحدد ، يمكنك الرجوع إلى: تحليل رمز المصدر CountDownlatch
رمز مصدر المشروع: https://gites.com/52itstyle/spring-data-jpa
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.