View Categories

11.4. تعدد خيوط المعالجة

1 دقيقة

جدول المحتويات

11.4. تعدد خيوط المعالجة #

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

يوضح الكود التالي كيفية تشغيل وحدة المعالجة عالية المستوى للمهام في الخلفية أثناء استمرار تشغيل البرنامج الرئيسي:

import threading, zipfile
class AsyncZip(threading.Thread):
    def __init__(self, infile, outfile):
        threading.Thread.__init__(self)
        self.infile = infile
        self.outfile = outfile
    def run(self):
        f = zipfile.ZipFile(self.outfile, 'w', zipfile.ZIP_DEFLATED)
        f.write(self.infile)
        f.close()
        print('Finished background zip of:', self.infile)
 background = AsyncZip('mydata.txt', 'myarchive.zip')
background.start()
print('The main program continues to run in foreground.')
background.join()    # Wait for the background task to finish
print('Main program waited until background was done.')

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

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

error: Content is protected !!
Scroll to Top