Select the product you need help with
ดิสก์แบบอะซิงโครนัส I/O ปรากฏเหมือนกันใน Windows NT, Windows 2000 และ Windows XPหมายเลขบทความ (Article ID): 156932 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้ เนื้อหาบนหน้านี้สรุปแฟ้ม I/O บน Microsoft Windows NT, Windows 2000 และ Windows XP สามารถเป็นแบบซิงโครนัส หรือแบบอะซิงโครนัส ลักษณะการทำงานเริ่มต้นสำหรับ I/O คือแบบซิงโครนัส: ฟังก์ชันการ I/O ถูกเรียก และส่งกลับเมื่อ I/O เสร็จสมบูรณ์ I/O แบบอะซิงโครนัส อนุญาตให้มีฟังก์ชัน I/O เพื่อกลับสู่การดำเนินการกลับไปยังผู้เรียกในทันทีที่อีกครอง แต่ไม่มีสันนิษฐาน I/O ที่จะเสร็จสมบูรณ์จนถึงเวลาในอนาคต ระบบปฏิบัติการแจ้งให้ผู้เรียกเมื่อ I/O เสร็จสมบูรณ์แล้ว อีกวิธีหนึ่งคือ ผู้เรียกที่สามารถกำหนดสถานะของการดำเนินการ I/O ที่ค้างชำระ โดยใช้บริการของระบบปฏิบัติการ ประโยชน์ของการแบบอะซิงโครนัส I/O คือ ผู้เรียกมีเวลาในการทำงานอื่น หรือออกคำขอเพิ่มเติมในขณะที่การดำเนินการ I/O ถูกเสร็จสมบูรณ์แล้ว เงื่อนไข Overlapped I/O มักใช้สำหรับ I/O แบบอะซิงโครนัสและ I/O overlapped ไม่ใช่สำหรับ I/O แบบซิงโครนัส บทความนี้ใช้เงื่อนไข Asynchronous และ Synchronous สำหรับการดำเนินการ I/O ภายใต้ Windows NT บทความนี้อนุมานเครื่องอ่านได้เฉพาะ familiarity ด้วยฟังก์ชัน I/O แฟ้มเช่น WriteFile CreateFile, ReadFile บ่อยครั้ง การดำเนินการ I/O แบบอะซิงโครนัสดำเนินกันเป็นเพียง I/O บางเงื่อนไขที่บทความนี้กล่าวถึงในการสร้างส่วนหลังจากที่ทำการดำเนินการ I/O synchronously ผู้เรียกได้มีเวลาสำหรับการทำงานเบื้องหลังได้เนื่องจากไม่มีกลับฟังก์ชัน I/O จนกว่า I/O เสร็จสมบูรณ์แล้ว ฟังก์ชันต่าง ๆ จะเกี่ยวข้องกับการ I/O แบบซิงโครนัส และแบบอะซิงโครนัส บทความนี้ใช้ ReadFile และ WriteFile เป็นตัวอย่าง เป็นทางเลือกที่ดี ReadFileEx และ WriteFileEx แม้ว่าบทความนี้อธิบายการเฉพาะดิสก์ I/O โดยเฉพาะอย่างยิ่ง หลักการจำนวนมากสามารถถูกประยุกต์ใช้กับชนิดอื่น ๆ ของ I/O เช่น I/O หรือเครือข่าย I/O พอร์ตอนุกรม หมายเหตุ:: เพราะ Windows 95 ไม่สนับสนุน I/O แบบอะซิงโครนัสในอุปกรณ์ดิสก์ (แม้ว่าได้บ้างบนชนิดของอุปกรณ์ I/O อื่น) ลักษณะการทำงานไม่ครอบคลุมในบทความนี้ ข้อมูลเพิ่มเติมตั้งค่าการ I/O แบบอะซิงโครนัสค่าสถานะ FILE_FLAG_OVERLAPPED ต้องถูกระบุใน CreateFile เมื่อมีเปิดแฟ้ม ค่าสถานะนี้ช่วยให้การดำเนินการ I/O ที่แฟ้มที่ปฏิบัติ asynchronously ที่นี่คือตัวอย่าง:ไม่มีสิ่งต่าง ๆ ที่โปรแกรมสามารถขณะรอการดำเนินการแบบอะซิงโครนัสให้เสร็จสมบูรณ์ เช่นการดำเนินงานเพิ่มเติม queuing หรือการทำงานเบื้องหลัง ตัวอย่างเช่น รหัสต่อไปนี้จัดการคาบเกี่ยวกันได้ และไม่ใช่ overlapped ความสมบูรณ์ของการดำเนินการอ่านได้อย่างถูกต้อง จะไม่ทำสิ่งใด ๆ มากกว่ารอ I/O คงค้างเพื่อที่ทำให้เสร็จสมบูรณ์: ถ้า การดำเนินเสร็จสมบูรณ์ในทันที แล้ว & NumberOfBytesRead ส่งผ่านไปยังอีกครอง ReadFile มีผลบังคับใช้สำหรับจำนวนไบต์ที่มีอ่าน ในกรณีนี้ ละเว้นโครงสร้าง OVERLAPPED ที่ส่งผ่านไป ReadFile ไม่ได้ใช้ดังกล่าวกับ GetOverlappedResult หรือ WaitForSingleObject caveat อื่น ด้วยการดำเนินการแบบอะซิงโครนัสไม่ว่า คุณต้องไม่ใช้โครงสร้างการ OVERLAPPED จนกว่าของการดำเนินการที่รอค้างอยู่เสร็จเรียบร้อยแล้ว ในอย่างอื่น ถ้าคุณมีการดำเนินการ I/O คงค้าง 3 คุณต้องใช้โครงสร้าง OVERLAPPED ที่สาม ถ้าคุณนำมาใช้เป็นโครงสร้าง OVERLAPPED คุณจะได้รับผลลัพธ์ unpredictable ในการดำเนินการ I/O และคุณอาจพบความเสียหายของข้อมูล นอกจากนี้ ก่อนที่คุณสามารถใช้โครงสร้าง OVERLAPPED เป็นครั้งแรก หรือ ก่อนที่คุณนำมาใช้ได้หลังจากการดำเนินงานก่อนหน้านี้เสร็จเรียบร้อยแล้ว คุณต้องเตใช้ได้อย่างถูกต้องงานดังกล่าวเพื่อให้มีข้อมูลน้อยเกินไปด้านซ้ายมีผลต่อการดำเนินการใหม่ การจำกัดชนิดเดียวกันที่ใช้กับบัฟเฟอร์ข้อมูลที่ใช้ในการดำเนินการ บัฟเฟอร์ข้อมูลที่ต้องไม่สามารถอ่าน หรือเขียนจนกว่าการดำเนินงานที่สอดคล้องกันของ I/O เสร็จเรียบร้อยแล้ว กำลังอ่าน หรือเขียนบัฟเฟอร์ที่อาจทำให้ข้อผิดพลาดและข้อมูลที่เสียหาย ปรากฏแบบอะซิงโครนัส I/O อยู่เป็น Synchronousถ้าคุณปฏิบัติตามคำแนะนำก่อนหน้าในบทความนี้ อย่างไรก็ตาม ผลิต I/O ของคุณทั้งหมดโดยทั่วไปจะยังคงทำ synchronously ในใบสั่งออก และไม่มีการดำเนินการ ReadFile กลับ FALSE ด้วย GetLastError() ต้องกลับ ERROR_IO_PENDING ซึ่งหมายความว่า คุณมีเวลาที่ไม่ทำงานเบื้องหลังใด ๆ เหตุใดนี้เกิดขึ้นได้อย่างไรมีหลายสาเหตุว่าเหตุใดการดำเนินการ I/O ทำ synchronously แม้ว่าคุณมี coded สำหรับการดำเนินการแบบอะซิงโครนัส: บีบอัดobstruction เดียวกับการดำเนินการแบบอะซิงโครนัสถูกบีบอัดของระบบไฟล์ NTFS โปรแกรมควบคุมระบบแฟ้มจะไม่เข้าแฟ้มที่บีบอัด asynchronously แต่ การดำเนินการทั้งหมดจะเพียงทำแบบซิงโครนัส นี่ไม่ประยุกต์ใช้กับแฟ้มที่บีบอัด ด้วยโปรแกรมอรรถประโยชน์ที่คล้ายกับการบีบอัดหรือ PKZIPการเข้ารหัสระบบไฟล์ ntfsเหมือนกับรายการบัญชี การเข้ารหัสลับแฟ้มสาเหตุโปรแกรมควบคุมระบบการแปลง I/O แบบอะซิงโครนัสแบบซิงโครนัส ถ้าแฟ้มมีการถอดรหัสลับ คำร้องขอ I/O จะแบบอะซิงโครนัสขยายแฟ้มเหตุผลที่ว่า การดำเนินการ I/O ถูกสมบูรณ์ synchronously อื่นกำลังดำเนินการเอง ใน Windows NT ใด ๆ เขียนการดำเนินการกับแฟ้มที่ขยายความยาวของจะเป็นแบบซิงโครนัสหมายเหตุ:: โปรแกรมประยุกต์สามารถทำการดำเนินการเขียนที่ระบุไว้ก่อนหน้านี้แบบอสมวาร โดยการเปลี่ยนความยาวข้อมูลที่ถูกต้องของแฟ้ม โดยใช้ฟังก์ชัน SetFileValidData การออกแบบ WriteFile แล้ว ใช้ SetFileValidData (ซึ่งจะพร้อมใช้งานบน Windows XP และรุ่นที่ใหม่กว่า), โปรแกรมประยุกต์สามารถอย่างมีประสิทธิภาพขยายแฟ้มโดยไม่ต้อง incurring เป็นนักประสิทธิภาพสำหรับศูนย์ไส้เหล่านั้น เนื่องจากระบบแฟ้ม NTFS ไม่เป็นศูนย์-การเติมข้อมูลจนถึงความยาวข้อมูลที่ถูกต้อง (VDL) ที่กำหนด โดย SetFileValidData ฟังก์ชันนี้ได้เกี่ยวข้องด้านการรักษาความปลอดภัยที่แฟ้มอาจถูกกำหนดให้ clusters ก่อนหน้านี้ได้ถูกว่าง โดยแฟ้มอื่น ๆ ดังนั้น SetFileValidData ต้องให้ผู้เรียกมี SeManageVolumePrivilege ใหม่ที่เปิดใช้งาน (โดยค่าเริ่มต้น นี้ถูกกำหนดให้กับผู้ดูแลเท่านั้น) Microsoft แนะนำว่า isv พิจารณาเกี่ยวข้องด้านการใช้ฟังก์ชันนี้อย่างระมัดระวัง แคชโปรแกรมส่วนใหญ่ I/O ควบคุม (ดิสก์ การสื่อสาร และอื่น ๆ) มีพิเศษ case รหัส ซึ่งถ้าการร้องขอ I/O สามารถจะสมบูรณ์ "ทันที" การดำเนินการที่จะสามารถให้เสร็จสมบูรณ์ และฟังก์ชัน ReadFile หรือ WriteFile จะส่งกลับ TRUE วิธีการทั้งหมด ชนิดของการดำเนินการเหล่านี้ปรากฏเป็นแบบซิงโครนัส สำหรับอุปกรณ์ดิสก์ โดยทั่วไป การร้องขอ I/O สามารถสามารถให้เสร็จสมบูรณ์ "ทันที" เมื่อข้อมูลถูกแคในหน่วยความจำข้อมูลไม่ได้อยู่ในแคชโครงร่างของแคชสามารถทำกับคุณ อย่างไรก็ตาม ถ้าข้อมูลไม่ได้อยู่ในแคช ใช้การแมปแฟ้มภายในแคช Windows NT ถูกนำมาใช้ ตัวจัดการหน่วยความจำใน Windows NT ไม่มีกลไกการข้อบกพร่องที่หน้าแบบอะซิงโครนัสเพื่อจัดการการแมปแฟ้มที่ใช้ โดยตัวจัดการการแคช ตัวจัดการการแคชสามารถ ยืนยันว่า หน้าการร้องขออยู่ในหน่วยความจำ อย่างไรก็ตาม ดังนั้นถ้าคุณออกแบบอ่านการแคชข้อแบบอะซิงโครนัส และเพจที่ไม่ได้อยู่ในหน่วยความจำ โปรแกรมควบคุมระบบแฟ้มอนุมานว่า คุณไม่ต้องการของเธรดที่ถูกบล็อก และคำขอจะถูกจัดการ โดยประเภทการผลิตมีจำกัดของเธรดตอนตัวทำงาน ตัวควบคุมถูกส่งกลับไปยังโปรแกรมของคุณหลังจากการเรียก ReadFile ของคุณด้วยการอ่านยังคงค้างอยู่ทำงานนี้อยู่กับการร้องขอ จำนวนเล็กแต่เนื่อง จากเก็บของเธรดของผู้ปฏิบัติงานที่ถูกจำกัด (อยู่สามบนระบบ 16 MB), มีจัดคิวจะยังคงสามารถเพียงสองสามคำร้องขอไว้กับโปรแกรมควบคุมของดิสก์ในเวลาที่เฉพาะ ถ้าคุณออกจำนวนมากดำเนินการ I/O สำหรับข้อมูลที่ไม่ได้อยู่ในแคช ผู้จัดการของแคชและการจัดการหน่วยความจำกลายเป็น saturated และร้องขอของคุณกำลังทำแบบซิงโครนัส ลักษณะการทำงานของตัวจัดการการแคชสามารถยังสามารถ influenced ขึ้นอยู่กับว่าคุณเข้าถึงแฟ้มแบบสุ่ม หรือตามลำดับ ประโยชน์ของการแคชจะดูได้มากที่สุดเมื่อมีการเข้าถึงแฟ้มตามลำดับ ค่าสถานะ FILE_FLAG_SEQUENTIAL_SCAN ในการเรียก CreateFile จะทำการปรับปรุงแคสำหรับการเข้าถึงชนิดนี้ อย่างไรก็ตาม ถ้าคุณเข้าถึงแฟ้มในแบบสุ่มที่ต้องการ ใช้ค่าสถานะ FILE_FLAG_RANDOM_ACCESS CreateFile เพื่อแนะนำผู้จัดการแคเพื่อปรับการตั้งค่าของลักษณะการทำงานสำหรับการเข้าถึงแบบสุ่ม ไม่ใช้การแคชค่าสถานะ FILE_FLAG_NO_BUFFERING มีผลต่อลักษณะการทำงานของระบบแฟ้มสำหรับการดำเนินการแบบอะซิงโครนัสมากที่สุด นี่คือวิธีที่ดีที่สุดในการรับประกันได้ว่า การร้องขอ I/O ถูกแบบอะซิงโครนัสจริง โปรแกรมแนะนำให้ระบบแฟ้มไม่ใช้กลไกการแคชใด ๆ เลยคำเตือน: ไม่มีการจำกัดบางอย่างในการใช้ค่าสถานะนี้ที่จำเป็นต้องดำเนินการกับการจัดตำแหน่งบัฟเฟอร์ข้อมูลและขนาดเซกเตอร์ของอุปกรณ์ ดูการอ้างอิงฟังก์ชันในเอกสารประกอบสำหรับฟังก์ชัน CreateFile สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ค่าสถานะนี้อย่างถูกต้อง โค้ดตัวอย่างแฟ้มต่อไปนี้สามารถดาวน์โหลดได้จากศูนย์ดาวน์โหลดของ Microsoft::Asynczip.exe สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการดาวน์โหลดแฟ้มสนับสนุนของ Microsoft โปรดคลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความใน Microsoft Knowledge Base::
(http://download.microsoft.com/download/platformsdk/sample/3/nt4/en-us/asynczip.exe)
119591 Microsoft สแกนแฟ้มนี้เพื่อหาไวรัส Microsoft ใช้ซอฟต์แวร์ตรวจสอบไวรัสล่าสุด ณ วันที่มีการประกาศแฟ้มนั้นๆ แฟ้มดังกล่าวจะถูกเก็บในเซิร์ฟเวอร์เพิ่มการรักษาความปลอดภัย ซึ่งช่วยป้องกันการเปลี่ยนแปลงแก้ไขแฟ้มโดยไม่ได้รับอนุญาตตัวอย่างรหัสที่เกี่ยวข้องกับบทความนี้อธิบายการใช้ค่าสถานะและฟังก์ชันที่มีการกล่าวถึง รหัสที่รันเป็นแอพลิเคชันของคอนโซลใน Windows NT สวิตช์บรรทัดคำสั่งต่อไปนี้ควบคุมลักษณะการทำงานของ:
(http://support.microsoft.com/kb/119591/EN-US/
)
วิธีรับแฟ้มการสนับสนุนของไมโครซอฟท์จากบริการออนไลน์
Asynchio
Usage: asynchio [options]
Options:
/fFilePattern Files to use for I/O.
/s Specifies synchronous operation.
/n Specifies that no buffering should be used
/r Use FILE_FLAG_RANDOM_ACCESS
/l Use FILE_FLAG_SEQUENTIAL_SCAN
/o### Issue ### operations
/e First read entire file, then issue smaller reads
/? Display this usage message.
ตัวอย่าง: /n /f*.bmp asynchio ค่าเริ่มต้นการทำงานของโปรแกรมนี้ถูกใช้สำหรับการดำเนินการแบบอะซิงโครนัส buffered โดยค่าเริ่มต้น การดำเนินการ I/O 500 กำลังขอผลลัพธ์การทดสอบเวิลด์จริงต่อไปนี้คือ ผลลัพธ์การทดสอบบางอย่างจากโค้ดตัวอย่าง magnitude หมายเลขไม่จำเป็นที่นี่ และจากคอมพิวเตอร์เครื่องที่แตกต่างกันไป แต่ความสัมพันธ์ของหมายเลขที่นำไปเปรียบเทียบกัน illuminates affect ทั่วไปของค่าสถานะประสิทธิภาพการทำงานคุณคาดว่าจะดูผลลัพธ์ที่คล้ายกับข้อความต่อไปนี้:
บทสรุปคุณสามารถเลือกวิธีการใดจะดีที่สุดเนื่องจากทั้งหมดขึ้นชนิด ขนาด และจำนวนของการดำเนินการที่โปรแกรมของคุณทำต่อไปนี้การเข้าถึงแฟ้มการเริ่มต้นโดยไม่ได้ระบุค่าสถานะใด ๆ พิเศษเพื่อ CreateFile เป็นการดำเนินการแบบซิงโครนัส และเก็บไว้ชั่วคราว หมายเหตุ:: คุณได้ทำงานแบบอะซิงโครนัสบางอย่างโดยอัตโนมัติในโหมดนี้ได้เนื่องจากโปรแกรมควบคุมระบบแฟ้มใด predictive แบบอะซิงโครนัสอ่าน ล่วงหน้า และแบบอะซิงโครนัส lazy เขียนข้อมูลที่ถูกปรับเปลี่ยน แม้ว่าการตรวจสอบนี้ไม่ให้ s แอพลิเคชัน [ASCII 146] I/O แบบอะซิงโครนัส มันเป็นกรณีนี้เหมาะสำหรับส่วนใหญ่มักแอพลิเคชันอย่างง่าย ถ้า ที่อีกครอง โปรแกรมประยุกต์ของคุณไม่ปกติ คุณอาจต้องดำเนินการบางตัวรวบรวมสถานะและตรวจสอบประสิทธิภาพเพื่อกำหนดวิธีที่ดีที่สุด เหมือนกับการทดสอบที่มีภาพประกอบก่อนหน้าในบทความนี้ การรวบรวมสถานะเวลาที่ใช้ในฟังก์ชัน ReadFile หรือ WriteFile และจากนั้น เปรียบเทียบกับระยะเวลาที่จะใช้สำหรับการดำเนินการ I/O จริงให้เสร็จสมบูรณ์ในขณะนี้มีประโยชน์มาก ถ้าส่วนใหญ่ของเวลาจะใช้ในในการออก I/O แท้จริงแล้ว แล้ว I/O ของคุณกำลังเสร็จ synchronously อย่างไรก็ตาม ถ้าเวลาใช้ในการร้องขอ I/O ออก มีขนาดค่อนข้างเล็กเปรียบเทียบกับเวลาใช้สำหรับการดำเนินการ I/O ให้เสร็จสมบูรณ์ จาก นั้นการดำเนินการของคุณจะไม่ถือว่า asynchronously ตัวอย่างรหัสที่ระบุไว้ก่อนหน้าในบทความนี้ใช้ฟังก์ชัน QueryPerformanceCounter ทำการรวบรวมสถานะที่ภายใน ตรวจสอบประสิทธิภาพจะช่วยตรวจสอบอย่างมีประสิทธิภาพวิธีการใช้โปรแกรมของดิสก์และแคช การติดตามเคาน์เตอร์วัดประสิทธิภาพสำหรับวัตถุในแคชใด ๆ จะบ่งชี้ประสิทธิภาพการทำงานของตัวจัดการการแคช การติดตามเคาน์เตอร์วัดประสิทธิภาพสำหรับวัตถุมีอยู่จริงของดิสก์หรือดิสก์แบบลอจิคัลจะบ่งชี้ประสิทธิภาพของระบบดิสก์ มีโปรแกรมอรรถประโยชน์ต่าง ๆ ที่มีประโยชน์ในการตรวจสอบประสิทธิภาพ PerfMon และ DiskPerf เป็นประโยชน์อย่างมาก สำหรับระบบที่จะรวบรวมข้อมูลประสิทธิภาพการทำงานของระบบดิสก์ คุณต้องออกคำสั่ง -y diskperf ก่อน หลังจากที่คุณออกคำสั่ง คุณต้องเริ่มต้นระบบเพื่อเริ่มการเก็บรวบรวมข้อมูล ข้อมูลอ้างอิงสำหรับข้อมูลเพิ่มเติมเกี่ยวกับโปรแกรมอรรถประโยชน์เหล่านี้และตรวจสอบประสิทธิภาพการทำงาน ให้ดูที่ไดรฟ์ข้อมูล " Optimizing Windows NT " ในเอกสารประกอบของ Windows NT ทรัพยากร Kit SQL Server ต้องใช้ระบบเพื่อสนับสนุน มีการจัดส่งไปยังสื่อที่เสถียร ตาม outlined ภายใต้โปรแกรมตรวจทาน Microsoft SQL Server Always-On เก็บโซลูชันแก้ไข Foสำหรับข้อมูลเพิ่มเติมเกี่ยวกับความต้องการป้อนข้อมูล และผลลัพธ์สำหรับโปรแกรมของฐานข้อมูล SQL Server คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft: 967576
(http://support.microsoft.com/kb/967576/
)
ข้อกำหนดของโปรแกรมอินพุต/เอาท์พุตฐานข้อมูลของเซิร์ฟเวอร์ Microsoft SQLคุณสมบัติหมายเลขบทความ (Article ID): 156932 - รีวิวครั้งสุดท้าย: 12 ตุลาคม 2553 - Revision: 1.0 ใช้กับ
แปลโดยคอมพิวเตอร์ ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:156932
(http://support.microsoft.com/kb/156932/en-us/
)
| การแปลบทความ
|




กลับไปด้านบน








