السلام عليكم

هناك للأسف خطأ شائع يقوم التجار بإستخدامه
حينما يصدر معالج ثنائي النواة بسرعة 2.2 فهم يكتبوا 2*2.2 فيقوم التاجر سواء أكان بجهل منه او بتعمد بضرب الرقمين

فهذه العلاقة 2*2.2 لا تعني ان السرعة هي 4.4 فهي ليست علاقة ضرب ولكنها علاقة توضح ان هناك نواتين كل نواة ترددها 2.2 كحد أقصي

فيأتينا سؤال دائما
لو سرعة كل نواة 2.2 فهذا معناه فعلاً أن السرعة الكلية 4.4
الجواب أيضا لا

طيب كيف تفسر الأمر ؟

سأشرح لكم بمثال بسيط

لنتخيل ان لدينا بلدين الأولي تسمي X والثانية تسمي Y
المسافة بين البلدين هي 1000 كيلومتر

لو أحضرنا سيارة بسرعة 100 كيلومتر في الساعه فكم من الوقت ستحتاج ؟
الجواب 10 ساعات

طيب سؤال هل لو أحضرنا سيارتين كل واحدة بسرعة 100 كيلومتر في الساعة ستكون سرعتنا 200 كيلومتر في الساعة وبالتالي نصل في 5 ساعات :D

الجواب طبعاً بالطبع لا

طيب إذا ما هي فائدة تعدد الأنوية ؟
تعدد الأنوية يصلح لو كان التطبيق يمكن تقسيمه وجعله يسير في مسارين كل مسار في نواة فنختصر الوقت

هل تريد مثال أيضا بسيط ؟
سأشرح لكم

تخيلو لو كانت السيارة تأخذ فقط 14 راكب
ولدينا 28 راكب فكم من الوقت سنحتاج ؟

سنحتاج 10 ساعات لنقل 14 راكب
ثم 10 ساعات أخري لنقل ال 14 راكب الأخرين ( لن نحسب زمن عودة السيارة لانه في المعالج لا يوجد رجوع ولكنه وقت تنفيذ مهمة ثم ينتقل للتالية لها )

طيب لو كان معنا سيارتين ؟
سننقل ال 28 راكب في 10 ساعات فقط وبذلك نكون قد وفرنا نصف الوقت حقاً

سؤال أخر : هل يعني ذلك أن المعالجات الثنائية وغيرها تنفع فقط في البرامج التي تدعم تعدد الأنوية ؟

الجواب لا

فهي تنفع ايضا في تعدد المهام مثل فتح أكثر من برنامج وتخصيص نواة لكل برنامج ليعمل عليها فتجد ان فتح برنامج يعمل علي نواة واحدة لا يعيقك بشكل كامل ولكنه يترك لك المجال للعمل علي برنامج أخر علي النواة الثانية

سؤال أخر : هل يعني ذلك أن البرنامج الداعم لتعدد الأنوية يأخذ علي المعالج الثنائي نصف وقت الأحادي بالضبط كالمثال الذي ذكرته ؟

الجواب لا

عملية برمجة تطبيق يدعم تعدد الأنوية معقدة جدا
ولذلك معظم التطبيقات هذه لا تقسم المهام بالنصف بالضبط فهذا أمر مستحيل طبعا إلا في شروط وحدود معينة

بل تقوم مثلا بجعل مهمات معينة تتم في نواة ومهمات اخري تتم في النواة الثانية

مثلا لنفترض ان هناك تطبيق قمت بفتحه هذا التطبيق يحتاج لتنفيذ مهام في البداية تأخذ 20 ثانية يتبعها بتنفيذ مهام تأخذ 80 ثانية

فلو كانت المهام التابعة لا تعتمد علي الأولي يمكننا إرسال ال 20 ثانية الأولي لنواة وال 80 ثانية الثانية لنواة أخري فنكون قد وفرنا بالضبط من الزمن 20 ثانية

وبذلك يكون المعالج ثنائي الانوية أعطانا توفير في الوقت 20 % فقط وليس 50 % كون التطبيق الذي يحتاج 80 ثانية لا يمكن تقسيمه فهو متتابع ويعتمد علي بعضه
وبالتالي لو كان هناك معالج ثلاثي أو رباعي أو حتي ثماني فلن يقدم المزيد في ذلك التطبيق

سؤال : ما هي التطبيقات التي يمكن تقسيمها بشكل كامل لأقسام ؟
الجواب : هذه التطبيقات تكون غالباً تأخذ وقت طويل جدا من التنفيذ ويمكن تقسيمها لمهمات منفصلة كل مهمة تتم في نواة مختلة

مثلاً الريندر في الجرافيك يمكننا تقسيم العملية المطلوبة لأجزاء كل جزء منفصل عن الأخر ويتم في نواة منفصلة وبالتالي فلو قسمنا عملية تحتاج لساعه لعدة عمليات كل عملية هي جزء كامل مكتمل
جزء يحتاج لدقيقتين
وجزء يحتاج ل 150 ثانية
وجزء أخر يحتاج ل 260 ثانية إلخ

يتم ترتيب تلك الأقسام في طابور عمليات Process Queue وإرسالها بالتتابع علي الأنوية والنواة التي تنهي عملها نرسل لها جزء جديد خلفه أياً كان زمنه وبالتالي فكل نواة تعمل علي حدي وكأننا نعمل في موقف سيارات فيه العديد من السيارات تقوم بنقل المتواجدين في الموقف بحسب كل سيارة
فهذه تاخذ 5 ركاب مرة وهذه 14 وهذه تزيد واحد يركب في مكان إضافة إلخ

هذا كمثال بسيط

ولعمل ذلك بشكل برمجي فهو يتم بخطوات شديدة التعقيد ولهذا فالبرامج الداعمة لتعدد الأنوية ليست بكثيرة في الوقت الراهن

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

أتمني يكون الموضوع زاد وضوحاً