سؤال

أنا أدار بعض الاختبارات الإنتاجية. طلبي يجب أن

  1. قراءة من JMS.
  2. القيام ببعض المعالجة
  3. اكتب إلى JMS.

هدفي هنا هو محاكاة # 2، "بعض المعالجة". وهذا هو، وإدخال تأخير واحتلال وحدة المعالجة المركزية لفترة معينة (مثل 500ms) قبل إعادة توجيه الحدث.

سيكون النهج الساذج هو Thread.sleep(500). وبعد هذا من شأنه أن يقدم التأخير الصحيح في التنفيذ، لكنه لن يمارس وحدة المعالجة المركزية.

حساب الأرقام فيبوناتشي هو خيار واحد.هل استخدم أي شخص أي تقنيات مثيرة للاهتمام فقط للحفاظ على وحدة المعالجة المركزية (CPU) مشغول لوقت معين؟

الخصائص المثالية سيكون:

  • يؤدي مجموعة متنوعة من التعليمات، بدلا من (على سبيل المثال) فقط غزل على حلقة
  • ليس شيئا ساخوا نقطة ساخنة سوف تتحسن بعيدا عن لا شيء
  • لديه طريقة سهلة لضبط فترة المعالجة لأعلى أو لأسفل (الوقت لإكمال سوف تختلف بوضوح مع إعطاء الأجهزة)
هل كانت مفيدة؟

المحلول

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

نصائح أخرى

هل يمكن أن تجرب شيئا بسيطا مثل

private static void spin(int milliseconds) {
    long sleepTime = milliseconds*1000000L; // convert to nanoseconds
    long startTime = System.nanoTime();
    while ((System.nanoTime() - startTime) < sleepTime) {}
}

اختبار:

public static void main(String[] args) {
    final int NUM_TESTS = 1000;
    long start = System.nanoTime();
    for (int i = 0; i < NUM_TESTS; i++) {
        spin(500);
    }
    System.out.println("Took " + (System.nanoTime()-start)/1000000 +
        "ms (expected " + (NUM_TESTS*500) + ")");
}

خرجي:

$ java SpinTest
Took 500023ms (expected 500000)

لذلك لم تحصل الحلقة على الأمثل بعيدا (و نعم، لقد ارتفعت وحدة المعالجة المركزية الخاصة بي إلى 100٪ لمدة ثماني دقائق لاختبار هذا :)).

إنشاء مجموعة كبيرة جدا من الكائنات العشوائية ثم المكالمات البديلة إلى Collections.shuffle() و Collections.sort().

استخدمت Jakarta Commons Lang لتوليد سلاسل عشوائية لأغراض خلط / الفرز.

قم بإنشاء مصفوفة وقم بتلاعب بضع مصفوفة.

يمكنك ضبط ذلك بسهولة عن طريق تغيير حجم المصفوفة.

أشياء أخرى يمكنك استخدامها، ربما:

        long start  = System.currentTimeMillis();
        long count = 0l;
        for(long x=0;x<Integer.MAX_VALUE ;x++){
            count+=1;
        }
        long end = System.currentTimeMillis();
        System.out.println(end-start +" ms");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top