func say(s string) { for i := 0; i مرحبًا عالم مرحبًا عالم مرحبًا عالم مرحبًا عالم مرحبًاالإخراج بدون تشغيل مرحبًا مرحبًا مرحبًا مرحبًا
func say(s string) { for i := 0; i شرحفي إصدارات GO قبل 1.5 ، runtime.gosched () عُّل بشكل صريح عن السيطرة على goroutines الأخرى عند استدعاء. على الرغم من أن برامج GO تعمل على مؤشر ترابط OS واحد افتراضيًا ، فقد سمح Runtime.gosched () للمجدول بتبديل التنفيذ بين goroutines.
func say(s string) { for i := 0; i عندما تم تعيين Gomaxprocs أو ضبطه على 1 ، فإن تعدد المهارات التعاونية لـ GO المطلوبة المطلوبة إلى السيطرة على التحكم الصريح. وبالتالي ، في مثال الكود أعلاه ، ظهر إخراج "العالم" فقط عند استدعاء وقت التشغيل. قد ينشئ هذا GO THREAPS متعددة لتشغيل Goroutines.مع ضبط GOMAXPROCS على قيمة أكبر من 1 ، يمكن تشغيل goroutines بالتوازي. ومع ذلك ، على عكس أنظمة تعدد المهام الاستباقية ، يجب أن لا يزال Goroutines يعطي التحكم بشكل صريح للسماح Goroutines الآخرين بالتنفيذ. وذلك لأن GO يستخدم تعدد المهام التعاونية ، حيث يستسلم Goroutines التحكم طوعًا إلى الجدولة.
الآثار المترتبة على التوازي
مع تعيين gomaxprocs إلى قيمة أكبر من 1 ، يمكن أن تصبح نتيجة المتشابكة المتداولة ، مع الجداول الزمنية للتبديل بينهم في أي وقت. يمكن أن يؤدي ذلك إلى أنماط إخراج غير متوقعة ، كما هو موضح في المثال أعلاه عندما تم ضبط GomaxProcs على 2.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3