الحصول على عدد من النوى وحدة المعالجة المركزية في جافا سكريبت؟

StackOverflow https://stackoverflow.com/questions/3289465

سؤال

هل هناك طريقة لتحديد عدد نوى وحدة المعالجة المركزية المتوفرة في JavaScript، بحيث يمكنك ضبط عدد العاملين على الويب اعتمادًا على ذلك؟

هل كانت مفيدة؟

المحلول

نعم.على حد تعبير MDN:

ال navigator.hardwareConcurrency تقوم الخاصية للقراءة فقط بإرجاع عدد المعالجات المنطقية المتاحة لتشغيل سلاسل العمليات على جهاز الكمبيوتر الخاص بالمستخدم...

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

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

انها مدعومة من كل متصفح باستثناء إنترنت إكسبلورر. للقيام بذلك، يمكنك استخدام polyfill core-estimator (تجريبي, مشاركة مدونة).

نصائح أخرى

لا، ليس هناك، إلا إذا كنت تستخدم بعض ActiveX.

إليك مقدر التزامن سريع إلى حد ما اخترقته معا ... لم يخضع اختبارا كبيرا بعد:

http://jsfiddle.net/ma4yt/2/

إليك رمز تشغيل العمال (لأن لدي ارتباط JSfiddle ضروري):

giveacodicetagpre.

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

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

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

import {WebCPU} from 'webcpu';

WebCPU.detectCPU().then(result => {
    console.log(`Reported Cores: ${result.reportedCores}`);
    console.log(`Estimated Idle Cores: ${result.estimatedIdleCores}`);
    console.log(`Estimated Physical Cores: ${result.estimatedPhysicalCores}`);
});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top