يجب أن يعرف الأشخاص الذين هم على دراية ببرمجة WIN32 أن طريقة إدارة العمليات لـ WIN32 تختلف تمامًا عن طريقة Linux في UNIX، لا يوجد سوى مفهوم العملية، ولكن في WIN32 يوجد أيضًا مفهوم "الخيط"، لذلك Linux. وWIN32 هنا ما هو الفرق؟
العملية/الخيط في WIN32 موروثة من OS/2. في WIN32، تشير "العملية" إلى برنامج، و"الخيط" هو "دليل" التنفيذ في "العملية". من وجهة النظر الأساسية، لا تختلف العمليات المتعددة لـ WIN32 كثيرًا عن تلك الموجودة في Linux. إن مؤشر الترابط في WIN32 يعادل عملية Linux وهو رمز تنفيذ فعلي. ومع ذلك، في WIN32، تتم مشاركة مقاطع البيانات بين مؤشرات الترابط في نفس العملية. هذا هو الاختلاف الأكبر عن عملية Linux.
يوضح البرنامج التالي كيف تبدأ العملية التالية لـ WIN32 في إنشاء خيط.
كثافة العمليات ز؛ DWORD WINAPI ChildProcess(LPVOID lpParameter){ كثافة العمليات أنا؛ لـ (i = 1; i <1000; i ++) { ز++; printf("هذا هو الموضوع الفرعي: %dn", g ); } خروج الموضوع( 0 ); }; الفراغ الرئيسي () { معرف الخيط الدولي ؛ كثافة العمليات أنا؛ ز = 0؛ CreateThread( NULL, 0, ChildProcess, NULL, 0, &threadID ); لـ (i = 1; i <1000; i ++) { ز++; printf("هذا هو الموضوع الأصلي: %dn", g ); } }
ضمن WIN32، يتم استخدام وظيفة CreateThread لإنشاء مؤشر ترابط. على عكس إنشاء عملية في Linux، لا يبدأ مؤشر ترابط WIN32 في التشغيل من نقطة الإنشاء، وبدلاً من ذلك، تحدد CreateThread وظيفة، ويبدأ تشغيل مؤشر الترابط من تلك الوظيفة. هذا البرنامج هو نفس برنامج UNIX السابق، حيث يحتوي كل خيط على خيطين يطبع كل منهما 1000 قطعة من المعلومات. ThreadID هو رقم مؤشر الترابط للخيط الفرعي. بالإضافة إلى ذلك، تتم مشاركة المتغير العام g بين الخيط الفرعي والخيط الأصلي. وهذا هو الاختلاف الأكبر عن Linux. كما ترون، فإن عملية/خيط WIN32 أكثر تعقيدًا من تلك الموجودة في Linux. ليس من الصعب تنفيذ خيط مشابه لـ WIN32 في Linux طالما أنه بعد التفرع، تستدعي العملية الفرعية وظيفة ThreadProc وتفتح ملفًا مشتركًا منطقة البيانات للمتغيرات العامة، ومع ذلك، من المستحيل تنفيذ وظائف مشابهة للشوكة ضمن WIN32. لذلك، على الرغم من أن وظائف المكتبة التي يوفرها مترجم لغة C ضمن WIN32 متوافقة بالفعل مع معظم وظائف مكتبة Linux/UNIX، إلا أنه لا يزال من غير الممكن تنفيذ الشوكة.
بالنسبة للأنظمة متعددة المهام، تعد مشاركة مناطق البيانات ضرورية، ولكنها أيضًا مشكلة يمكن أن تسبب ارتباكًا بسهولة. في نظام WIN32، يمكن للمبرمج أن ينسى بسهولة أن البيانات بين سلاسل الرسائل تتم مشاركتها بعد تعديل مؤشر ترابط لمتغير، ولكن يتم تعديل مؤشر ترابط آخر ذلك، مما يسبب مشاكل البرنامج. ومع ذلك، في نظام Linux، نظرًا لعدم مشاركة المتغيرات في الأصل، يحدد المبرمج بوضوح البيانات التي سيتم مشاركتها، مما يجعل البرنامج أكثر وضوحًا وأمانًا.
أما بالنسبة لمفهوم "العملية" في WIN32، فمعناها "التطبيق"، وهو ما يعادل exec في نظام UNIX.