Orang yang akrab dengan pemrograman WIN32 pasti tahu bahwa metode manajemen proses WIN32 sangat berbeda dengan Linux. Di UNIX hanya ada konsep proses, tetapi di WIN32 juga ada konsep "thread", jadi Linux. dan WIN32 ada di sini. Apa bedanya?
Proses/utas di WIN32 diwarisi dari OS/2. Di WIN32, "proses" mengacu pada suatu program, dan "utas" adalah "petunjuk" eksekusi dalam "proses". Dari sudut pandang inti, multi-proses WIN32 tidak jauh berbeda dengan Linux. Thread di WIN32 setara dengan proses Linux dan merupakan kode eksekusi yang sebenarnya. Namun, di WIN32, segmen data dibagi antar thread dalam proses yang sama. Ini adalah perbedaan terbesar dari proses Linux.
Program berikut menunjukkan bagaimana proses selanjutnya dari WIN32 memulai sebuah thread.
ke dalam g; Proses Anak DWORD WINAPI(LPVOID lpParameter){ ke dalam aku; untuk ( saya = 1; saya <1000; saya ++) { g++; printf("Ini adalah Thread Anak : %dn",g ); } Keluar dari Thread( 0 ); }; batalkan utama() { int ID utas; ke dalam aku; g = 0; CreateThread( NULL, 0, ChildProcess, NULL, 0, &threadID ); untuk ( saya = 1; saya <1000; saya ++) { g++; printf("Ini Thread Induk : %dn",g ); } }
Di bawah WIN32, fungsi CreateThread digunakan untuk membuat thread. Berbeda dengan membuat proses di Linux, thread WIN32 tidak mulai berjalan dari titik pembuatan. Sebaliknya, CreateThread menentukan fungsi, dan thread mulai berjalan dari fungsi tersebut. Program ini sama dengan program UNIX sebelumnya, dengan dua thread yang masing-masing mencetak 1000 informasi. threadID adalah nomor thread dari thread anak. Selain itu, variabel global g dibagikan oleh thread anak dan thread induk. Ini adalah perbedaan terbesar dari Linux. Seperti yang Anda lihat, proses/thread di WIN32 lebih rumit daripada di Linux. Tidak sulit untuk mengimplementasikan thread yang mirip dengan WIN32 di Linux selama setelah forking, proses anak memanggil fungsi ThreadProc dan membuka shared area data untuk variabel global. Namun, tidak mungkin untuk mengimplementasikan fungsi yang mirip dengan fork di bawah WIN32. Oleh karena itu, meskipun fungsi perpustakaan yang disediakan oleh kompiler bahasa C di bawah WIN32 sudah kompatibel dengan sebagian besar fungsi perpustakaan Linux/UNIX, fork masih tidak dapat diimplementasikan.
Untuk sistem multi-tasking, berbagi area data diperlukan, tetapi ini juga merupakan masalah yang dapat dengan mudah menyebabkan kebingungan. Di bawah WIN32, seorang programmer dapat dengan mudah lupa bahwa data antar thread dibagikan setelah sebuah thread memodifikasi suatu variabel, tetapi thread lain diubah itu, menyebabkan masalah program. Namun, di Linux, karena variabel awalnya tidak dibagikan, pemrogram secara eksplisit menentukan data yang akan dibagikan, membuat program lebih jelas dan aman.
Adapun konsep "proses" di WIN32 artinya adalah "aplikasi", yang setara dengan exec di UNIX.