คนที่คุ้นเคยกับการเขียนโปรแกรม 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 <1,000; i ++) { ก++; printf( "นี่คือหัวข้อย่อย: %dn", g ); - ออกจากกระทู้( 0 ); - เป็นโมฆะหลัก () - รหัสเธรด int; ฉัน; ก. = 0; CreateThread( NULL, 0, ChildProcess, NULL, 0, &threadID ); สำหรับ ( i = 1; i <1,000; i ++) { ก++; printf( "นี่คือหัวข้อหลัก: %dn", g ); - -
ภายใต้ WIN32 ฟังก์ชัน CreateThread ถูกใช้เพื่อสร้างเธรด ต่างจากการสร้างกระบวนการภายใต้ Linux เธรด WIN32 ไม่ได้เริ่มทำงานจากจุดสร้าง แต่ CreateThread จะระบุฟังก์ชัน และเธรดจะเริ่มทำงานจากฟังก์ชันนั้น โปรแกรมนี้เหมือนกับโปรแกรม UNIX ก่อนหน้า โดยแต่ละเธรดจะพิมพ์ข้อมูลได้ 1,000 ชิ้นต่อ 2 เธรด threadID คือหมายเลขเธรดของเธรดย่อย นอกจากนี้ ตัวแปรโกลบอล g ยังถูกใช้ร่วมกันโดยเธรดย่อยและเธรดหลัก นี่คือความแตกต่างที่ใหญ่ที่สุดจาก Linux อย่างที่คุณเห็น กระบวนการ/เธรดของ WIN32 นั้นซับซ้อนกว่าของ Linux มันไม่ยากที่จะปรับใช้เธรดที่คล้ายกับ WIN32 ใน Linux ตราบใดที่หลังจากการฟอร์ก กระบวนการลูกจะเรียกใช้ฟังก์ชัน ThreadProc และเปิดการแชร์ พื้นที่ข้อมูลสำหรับตัวแปรส่วนกลาง อย่างไรก็ตาม เป็นไปไม่ได้ที่จะใช้ฟังก์ชันที่คล้ายกับ fork ภายใต้ WIN32 ดังนั้น แม้ว่าฟังก์ชันไลบรารีที่จัดเตรียมโดยคอมไพเลอร์ภาษา C ภายใต้ WIN32 จะเข้ากันได้กับฟังก์ชันไลบรารี Linux/UNIX ส่วนใหญ่อยู่แล้ว แต่ fork ก็ยังไม่สามารถนำมาใช้ได้
สำหรับระบบมัลติทาสกิ้ง การแบ่งปันพื้นที่ข้อมูลเป็นสิ่งจำเป็น แต่ก็เป็นปัญหาที่ทำให้เกิดความสับสนได้ง่ายเช่นกัน ภายใต้ WIN32 โปรแกรมเมอร์สามารถลืมได้อย่างง่ายดายว่าข้อมูลระหว่างเธรดถูกแชร์ หลังจากที่เธรดแก้ไขตัวแปร แต่มีการแก้ไขเธรดอื่น ทำให้โปรแกรมมีปัญหา อย่างไรก็ตาม สำหรับ Linux เนื่องจากตัวแปรไม่ได้ถูกแชร์ตั้งแต่แรก โปรแกรมเมอร์จึงระบุข้อมูลที่จะแชร์อย่างชัดเจน ทำให้โปรแกรมมีความชัดเจนและปลอดภัยยิ่งขึ้น
สำหรับแนวคิดของ "กระบวนการ" ใน WIN32 ความหมายของมันคือ "แอปพลิเคชัน" ซึ่งเทียบเท่ากับ exec ภายใต้ UNIX