بطء غير متوقع: مقياس أداء بسيط للمقابس يُظهر تخلف لينكس عن أوبن بي إس دي

2025-08-16

يُظهر برنامج بسيط بلغة سي يقوم بإنشاء مؤشرات وفتح 256 مقبسًا، اختلافًا مفاجئًا في الأداء بين لينكس وأوبن بي إس دي. في لينكس، تتراوح أوقات التنفيذ بين 17 و 26 مللي ثانية؛ بينما في أوبن بي إس دي، فهي تتراوح بين 2 و 6 مللي ثانية فقط. والأكثر إثارة للاهتمام، أن أوبن بي إس دي أظهر في البداية خطأ "الكثير من الملفات المفتوحة"، مما يشير إلى اختلافات في إدارة الموارد. ولاحظ الكاتب أن التناقض لا يتعلق برمز الشبكة، ويتحدى القراء لإيجاد نظام لينكس يتفوق على أوبن بي إس دي في هذا المقياس.

اقرأ المزيد

حد 500 ميل للبريد الإلكتروني: تجربة غريبة

2025-07-09

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

اقرأ المزيد

مقياس DPI في X11: دحض الأسطورة

2025-06-25

يتحدى الكاتب الاعتقاد الشائع بأن X11 لا يدعم مقياس DPI من خلال رسم دائرة قطرها بوصتان بنجاح على عدة شاشات بأحجام ودقة مختلفة. باستخدام OpenGL وأحداث تكوين خادم X، يقوم الكاتب بضبط نصف قطر الدائرة ديناميكيًا بناءً على أبعاد الشاشة الفيزيائية التي تم الحصول عليها من خادم X. على الرغم من وجود بعض عدم الدقة، مثل اختلاف في حجم التلفزيون المبلغ عنه، إلا أن التجربة تثبت أن مقياس DPI في X11 ممكن. تُبرز العملية أهمية تجاهل القيود المفروضة من قبل الآخرين والسعي لتحقيق المهام التي تبدو مستحيلة.

اقرأ المزيد
التطوير مقياس DPI

مصائد خطوط الأنابيب: دروس من SMTP

2025-06-20

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

اقرأ المزيد
التطوير

كفاءة io.Reader في Go: معركة مع التوجيه غير المباشر والتحقق من الأنواع

2025-05-19

تستخدم العديد من دوال Go واجهة io.Reader كمدخل، مما يسمح بالبث المباشر وتجنب تحميل كل شيء في الذاكرة. ومع ذلك، عندما يكون لديك بالفعل البايتات، فإن استخدامها مباشرة يكون أكثر كفاءة. تصف هذه المقالة تجربة الكاتب في فك تشفير الصور باستخدام libavif و libheif. من أجل البساطة، تم استخدام واجهات الذاكرة البسيطة، ولكن دالة image.Decode في Go تتحقق مما إذا كانت هناك دالة Peek في io.Reader، وتغلفها بـ bufio.Reader إذا لم يتم العثور عليها، مما يمنع الاستخدام المباشر لـ bytes.Reader. يستخدم الكاتب تأكيدات الأنواع و unsafe.Pointer لتجاوز bufio.Reader و bytes.Reader، لتحقيق نسخة صفرية. ومع ذلك، تسلط المقالة الضوء على مشاكل في التحقق من النوع وتصميم الواجهة في Go، بما في ذلك "واجهات برمجة التطبيقات الظليلة" الناتجة.

اقرأ المزيد
التطوير

كتابة برنامج تشغيل ASUS ACPI WMI للتحكم في المروحة في OpenBSD

2025-05-11

يُفصّل الكاتب رحلته في كتابة برنامج تشغيل ASUS ACPI WMI لنظام OpenBSD للتحكم في سرعة مروحة حاسوبه المحمول. اشتملت العملية على التغلب على تحديات تتعلق بترتيب البايتات في ACPI و WMI، واستخدام acpidump و iasl لتحليل شفرة ACPI الخاصة بالنظام، وفي النهاية تحقيق التحكم في سرعة المروحة. قارن الكاتب بين أساليب تطوير برامج التشغيل في أنظمة Linux و FreeBSD، مسلطًا الضوء على تنظيم الشفرة المريح في OpenBSD.

اقرأ المزيد

غطسة عميقة: تتبع دعوة النظام `write()` في OpenBSD

2025-03-29

تتناول هذه المقالة بتعمق التنفيذ على مستوى منخفض لدعوة النظام `write()` في OpenBSD. بدءًا من دعوة `write()` في مساحة المستخدم، تتبع مسار البيانات عبر النواة، مُفصلة المسار الكامل من دعوة النظام إلى كتابة البيانات على قرص صلب NVMe. تكشف المقالة عن سلسلة من دعوات دالة النواة، بما في ذلك `mi_syscall`, `sys_write`, `dofilewritev`, `vn_write`, `ffs_write`, `uiomove`, `bdwrite`, `syncer`, `bwrite`, `ufs_strategy`, `spec_strategy`, `sdstrategy`، وأخيرًا برنامج تشغيل NVMe. تُوضح تحويل البيانات ونقلها عبر مستويات تجريد مختلفة، مُسلطة الضوء على تفاصيل تقنية رئيسية مثل آليات التخزين المؤقت ونقل DMA.

اقرأ المزيد
التطوير دعوة النظام