คำถามติดแท็ก io

อินพุต / เอาต์พุตของข้อมูลไปยัง / จากระบบ โดยปกติหมายถึงการจัดเก็บไฟล์หรือการสื่อสารบนเครือข่าย แต่ยังอาจหมายถึงการโต้ตอบกับผู้ใช้ผ่านอินเทอร์เฟซผู้ใช้

5
คำวิจารณ์ของ IO monad ที่ถูกมองว่าเป็น monad state ที่ปฏิบัติงานบนโลกนี้
IOmonad ใน Haskell มักจะมีการอธิบายเป็น monad รัฐที่รัฐเป็นโลก ดังนั้นค่าของชนิดIO amonad worldState -> (a, worldState)ถูกมองว่าเป็นสิ่งที่ชอบ ก่อนหน้านี้ฉันอ่านบทความ (หรือโพสต์รายการบล็อก / จดหมายข่าว) ที่วิจารณ์มุมมองนี้และให้เหตุผลหลายประการว่าทำไมมันไม่ถูกต้อง แต่ฉันจำไม่ได้ว่าทั้งบทความและเหตุผล มีใครรู้บ้าง แก้ไข:บทความดูเหมือนจะหายไปดังนั้นเริ่มรวบรวมข้อโต้แย้งต่าง ๆ ที่นี่ ฉันเริ่มที่จะทำให้สิ่งต่าง ๆ น่าสนใจยิ่งขึ้น แก้ไข:บทความที่ฉันกำลังมองหาคือการจัดการกับทีมที่น่าอึดอัดใจ: อินพุต / เอาท์พุต monadic, การทำงานพร้อมกัน, ข้อยกเว้นและการโทรภาษาต่างประเทศใน Haskellโดย Simon Peyton Jones (ขอบคุณคำตอบของ TacTics)

6
ทำไมเราต้องรอ I / O
เป็นที่ทราบกันดีอยู่แล้วว่าการทำงานของดิสก์ช้าและเรารู้สาเหตุที่ทำให้การทำงานช้า ดังนั้นคำถามที่นี่คือเหตุผลที่เราต้องรอ I / O หรือทำไมมีสิ่งเช่น IOWait ฯลฯ ฉันหมายถึงฉันสังเกตเห็นว่าเมื่อคุณทำงาน I / O บางส่วนในพื้นหลังโดยทั่วไปคอมพิวเตอร์ของคุณจะช้าลงมากฉันสังเกตว่าโดยเฉพาะอย่างยิ่งเมื่อใช้ Linux ถ้าคุณทำภารกิจ I / O อีกต่อไป ระบบปฏิบัติการเกือบจะไม่สามารถใช้งานได้จนกว่าจะเสร็จสิ้น ที่จริงฉันยังพบหัวข้อนี้ในบทความมีตัวอย่าง: การรอ I / O คือ 12.1% เซิร์ฟเวอร์นี้มี 8 คอร์ (ผ่าน cat / proc / cpuinfo) สิ่งนี้อยู่ใกล้กับ (1/8 คอร์ = 0.125) โดยพื้นฐานแล้วมันหมายความว่ามันทำให้คอมพิวเตอร์ช้าลงมากทำไมล่ะ? ฉันหมายถึงตกลงตอนนี้คอมพิวเตอร์ทั่วไปมีอย่างน้อย 2 คอร์บางครั้ง 4 หรือบางครั้งพวกเขามีมากขึ้นเพราะการทำไฮเปอร์เธรดหรืออะไรแบบนั้น แต่ตอนนี้คำถามคือทำไม CPU ถึงต้องอยู่ที่นั่นจริง …
28 cpu  io  operations 

2
เหตุใดโหมดการขึ้นบรรทัดใหม่แบบสากลจึงเลิกใช้ใน Python
ฉันเพิ่งสังเกตเห็นว่าคุณสมบัติการขึ้นบรรทัดใหม่สากลของการดำเนินการด้านไฟล์ดูเหมือนจะใกล้หมดแล้ว เอกสารประกอบสำหรับ Python 3.5 open's modeพารามิเตอร์ที่บ่งชี้ว่ามันเลิกใช้: 'U' โหมด newlines สากล (คัดค้าน) อย่างน้อยที่สุดกลับเป็น Python 3.2 openมีคำเตือน "ความเข้ากันได้ย้อนหลังเท่านั้น" ที่คล้ายกันเมื่อบันทึกการใช้modeอาร์กิวเมนต์: 'U' โหมดการขึ้นบรรทัดใหม่แบบสากล (สำหรับความเข้ากันได้แบบย้อนกลับไม่ควรใช้ในรหัสใหม่) แม้จะอยู่ใน Python 2.7 io.openเป็นคำเตือนที่คล้ายกันจะอยู่ในเอกสารของ เหตุผลนี้คืออะไร
26 python  io  deprecation 

4
มันแย่แค่ไหนที่เรียก println () บ่อยครั้งกว่าการต่อสตริงเข้าด้วยกันและเรียกมันครั้งเดียว?
คำถามนี้ถูกโยกย้ายจาก Code Exchange Stack Stack เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 5 ปีที่ผ่านมา ฉันรู้ว่าผลลัพธ์ไปยังคอนโซลเป็นการดำเนินการที่มีราคาแพง ในความสนใจของการอ่านรหัสบางครั้งมันก็ดีที่จะเรียกฟังก์ชั่นเพื่อส่งออกข้อความสองครั้งแทนที่จะมีสตริงข้อความยาวเป็นอาร์กิวเมนต์ ตัวอย่างเช่นมีประสิทธิภาพน้อยกว่าที่จะมี System.out.println("Good morning."); System.out.println("Please enter your name"); เมื่อเทียบกับ System.out.println("Good morning.\nPlease enter your name"); ในตัวอย่างความแตกต่างเป็นเพียงการโทรหนึ่งครั้งprintln()แต่จะเกิดอะไรขึ้นถ้ามีมากกว่านั้น ในหมายเหตุที่เกี่ยวข้องคำแถลงเกี่ยวกับการพิมพ์ข้อความอาจดูแปลกในขณะที่ดูซอร์สโค้ดหากข้อความที่จะพิมพ์ยาว ถ้าตัวอักษรไม่สามารถทำให้สั้นลงได้สิ่งที่สามารถทำได้? ควรเป็นกรณีที่มีการprintln()โทรหลายสายหรือไม่? มีคนเคยบอกฉันว่าบรรทัดของรหัสไม่ควรเกิน 80 อักขระ (IIRC) ดังนั้นคุณจะทำอย่างไร System.out.println("Good morning everyone. I am here today to present you with a very, …
23 java  c++  performance  c  io 

5
จุดใดที่การอ่านแบบอะซิงโครนัสของดิสก์ I / O มีประสิทธิภาพมากกว่าแบบซิงโครนัส
สมมติว่ามีโค้ดบางส่วนที่อ่านไฟล์สำหรับผู้ใช้หลายคนและไฟล์มีขนาดใดก็ได้: ขนาดใดที่มีประสิทธิภาพมากขึ้นในการอ่านไฟล์แบบอะซิงโครนัส? หรือจะพูดอีกวิธีหนึ่งไฟล์ต้องมีขนาดเล็กแค่ไหนเพื่อให้อ่านได้เร็วขึ้น? ฉันสังเกตเห็น (และบางทีฉันไม่ถูกต้อง) ว่าเมื่ออ่านไฟล์ที่มีขนาดเล็กมากมันใช้เวลานานในการอ่านแบบอะซิงโครนัสมากกว่าแบบซิงโครนัส (โดยเฉพาะกับ. NET) ฉันสมมติว่าสิ่งนี้เกี่ยวข้องกับการตั้งค่าเวลาสำหรับสิ่งต่างๆเช่นพอร์ต I / O Completion Port, เธรดและอื่น ๆ มีกฎง่ายๆที่จะช่วยออกที่นี่? หรือมันขึ้นอยู่กับระบบและสิ่งแวดล้อม?
22 efficiency  async  io 

4
ทำไมเราต้องพูดถึงชนิดข้อมูลของตัวแปรใน C
โดยปกติใน C เราต้องบอกคอมพิวเตอร์ถึงชนิดของข้อมูลในการประกาศตัวแปร เช่นในโปรแกรมต่อไปนี้ฉันต้องการพิมพ์ผลรวมของตัวเลขทศนิยมสองตัว X และ Y #include<stdio.h> main() { float X=5.2; float Y=5.1; float Z; Z=Y+X; printf("%f",Z); } ฉันต้องบอกคอมไพเลอร์ถึงชนิดของตัวแปร X คอมไพเลอร์ไม่สามารถระบุประเภทของXตัวเองได้หรือไม่ ใช่มันสามารถทำได้ถ้าฉันทำสิ่งนี้: #define X 5.2 ตอนนี้ฉันสามารถเขียนโปรแกรมโดยไม่บอกคอมไพเลอร์Xว่าเป็น: #include<stdio.h> #define X 5.2 main() { float Y=5.1; float Z; Z=Y+X; printf("%f",Z); } ดังนั้นเราจะเห็นว่าภาษา C มีคุณสมบัติบางอย่างที่ใช้ซึ่งสามารถกำหนดประเภทของข้อมูลด้วยตัวเอง ในกรณีของฉันมันกำหนดว่าXเป็นประเภทลอย ทำไมเราต้องพูดถึงประเภทของข้อมูลเมื่อเราประกาศบางสิ่งใน main ()? ทำไมถึงไม่สามารถคอมไพเลอร์กำหนดชนิดข้อมูลของตัวแปรในตัวของมันเองเช่นเดียวกับในmain()#define

2
คอนโทรลเลอร์ DMA ทำงานอย่างไร
จากหัวข้อ 5.1.4 การเข้าถึงหน่วยความจำโดยตรงในระบบปฏิบัติการสมัยใหม่โดย Andrew S. Tanenbaum, Herbert Bos, 2014 , เพื่อให้คำอธิบายง่ายขึ้นเราสันนิษฐานว่า CPU เข้าถึงอุปกรณ์และหน่วยความจำทั้งหมดผ่านบัสระบบเดียวที่เชื่อมต่อ CPU หน่วยความจำและอุปกรณ์ I / O ดังแสดงในรูปที่ 5-4 เพื่ออธิบายวิธีการทำงานของ DMA ให้เราพิจารณาก่อนว่าการอ่านดิสก์เกิดขึ้นอย่างไรเมื่อไม่ได้ใช้ DMA ก่อนอื่นตัวควบคุมดิสก์จะอ่านบล็อก (หนึ่งส่วนขึ้นไป) จากไดรฟ์แบบอนุกรมทีละบิตจนกระทั่งบล็อกทั้งหมดอยู่ในบัฟเฟอร์ภายในของคอนโทรลเลอร์ จากนั้นคำนวณการตรวจสอบเพื่อตรวจสอบว่าไม่มีข้อผิดพลาดในการอ่านเกิดขึ้น จากนั้นคอนโทรลเลอร์จะทำให้เกิดการขัดจังหวะ เมื่อระบบปฏิบัติการเริ่มทำงานมันสามารถอ่านบล็อกดิสก์จากบัฟเฟอร์ของคอนโทรลเลอร์เป็นไบต์หรือคำในแต่ละครั้งโดยเรียกใช้ลูปโดยการวนซ้ำแต่ละครั้งจะอ่านหนึ่งไบต์หรือหนึ่งคำจากอุปกรณ์ควบคุมรีจิสเตอร์และเก็บไว้ในหน่วยความจำหลัก ถาม: ในขั้นตอนที่สอง ไม่ถ่ายโอนข้อมูล " จากบัฟเฟอร์ของคอนโทรลเลอร์ " ไปยังหน่วยความจำหลัก? ทำไมถึงพูดว่า " จากบัฟเฟอร์ของคอนโทรลเลอร์ " และ " จากอุปกรณ์ควบคุมรีจิสเตอร์ "? ในขั้นตอนที่สองคอนโทรลเลอร์สามารถถ่ายโอนข้อมูลจากบัฟเฟอร์ไปยังหน่วยความจำหลักโดยไม่รบกวนการทำงานของ cpu และไม่เกี่ยวข้องกับระบบปฏิบัติการอีกครั้ง? เมื่อใช้ DMA …

1
Model-View-Controller (MVC) คอมโพเนนต์ใดที่จัดการการดำเนินการบันทึก / โหลด?
ในแอปพลิเคชั่น MVC แบบดั้งเดิมส่วนประกอบใด (รุ่นมุมมองหรือคอนโทรลเลอร์) ที่รับผิดชอบในการอ่าน / เขียนแบบจำลองไปยัง / จากดิสก์
12 mvc  io 

2
การเตรียมพร้อมกับการใช้หน่วยความจำ Async IO เสร็จสมบูรณ์หรือไม่
ฉันกำลังดูการสนทนานี้เกี่ยวกับการใช้ Async IO ใน Rust และ Carl กล่าวถึงแบบจำลองที่มีศักยภาพสองแบบ ความพร้อมและความสำเร็จ โมเดลความพร้อม: คุณบอกเคอร์เนลที่คุณต้องการอ่านจากซ็อกเก็ต ทำสิ่งอื่นเพื่อสักครู่ ... เคอร์เนลจะบอกคุณเมื่อซ็อกเก็ตพร้อม คุณอ่าน (เติมบัฟเฟอร์) ทำสิ่งที่คุณต้องการ ฟรีบัฟเฟอร์ (เกิดขึ้นโดยอัตโนมัติด้วยสนิม) เสร็จสิ้นรูปแบบ: คุณจัดสรรบัฟเฟอร์เพื่อให้เคอร์เนลเติม ทำสิ่งอื่นเพื่อสักครู่ ... เคอร์เนลจะบอกคุณเมื่อบัฟเฟอร์เต็ม ทำสิ่งที่คุณต้องการด้วยข้อมูล ฟรีบัฟเฟอร์ คาร์ลในตัวอย่างของการใช้รูปแบบการเตรียมความพร้อมที่คุณสามารถย้ำกว่าซ็อกเก็ตพร้อมเติมและพ้นบัฟเฟอร์ทั่วโลกซึ่งจะทำให้มันดูเหมือนมันจะใช้มากหน่วยความจำน้อย ตอนนี้สมมติฐานของฉัน: ภายใต้ประทุน (ในพื้นที่เคอร์เนล) เมื่อซ็อกเก็ตถูกกล่าวว่าเป็น "พร้อม" ข้อมูลมีอยู่แล้ว มันเข้ามาในซ็อกเก็ตผ่านเครือข่าย (หรือจากที่ใดก็ได้) และระบบปฏิบัติการนั้นก็เก็บข้อมูลไว้ มันไม่เหมือนกับว่าการจัดสรรหน่วยความจำอย่างน่าอัศจรรย์ไม่ได้เกิดขึ้นในโมเดลความพร้อม มันเป็นเพียงแค่ระบบปฏิบัติการที่เป็นนามธรรมจากคุณ ในรูปแบบเสร็จสมบูรณ์ระบบปฏิบัติการจะขอให้คุณจัดสรรหน่วยความจำก่อนที่ข้อมูลจะไหลเข้ามาและเห็นได้ชัดว่าเกิดอะไรขึ้น นี่คือโมเดลการเตรียมพร้อมในการแก้ไขของฉัน: คุณบอกเคอร์เนลที่คุณต้องการอ่านจากซ็อกเก็ต ทำสิ่งอื่นเพื่อสักครู่ ... การแก้ไข: ข้อมูลเข้าสู่ระบบปฏิบัติการ (บางที่ในหน่วยความจำเคอร์เนล) เคอร์เนลบอกคุณซ็อกเก็ตพร้อม คุณอ่าน (กรอกบัฟเฟอร์อื่นแยกต่างหากจากบัฟเฟอร์เคอร์เนลในต่างประเทศ (หรือคุณได้รับตัวชี้ไป?)) …
12 async  io 

7
ฉันจะใช้ TDD กับฟังก์ชั่นอ่าน / เขียนได้อย่างไร?
ดูเหมือนว่าปัญหาไก่และไข่ คุณสามารถทำให้เขียนฟังก์ชั่นเขียนไปยังแหล่งข้อมูลบางอย่าง แต่ไม่เคยรู้ว่าคุณบันทึกไว้อย่างถูกต้องโดยไม่ต้องฟังก์ชั่นการอ่านการทดสอบ คุณสามารถทำให้อ่านฟังก์ชั่นการอ่านจากแหล่งข้อมูล แต่คุณจะใส่สิ่งต่าง ๆ ในแหล่งข้อมูลที่จะอ่านโดยไม่ต้องฟังก์ชั่นการเขียนการทดสอบได้อย่างไร แก้ไข: ฉันกำลังเชื่อมต่อและทำธุรกรรมกับฐานข้อมูล SQL เพื่อบันทึกและโหลดวัตถุเพื่อใช้งาน ไม่มีจุดทดสอบฟังก์ชั่นการเข้าถึงที่ DB ให้ แต่ฉันตัดฟังก์ชั่น DB ดังกล่าวเพื่อทำให้เป็นอันดับ / ดีซีเรียลไลซ์วัตถุ ฉันต้องการให้แน่ใจว่าฉันเขียนและอ่านสิ่งที่ถูกต้องไปยังและจากฐานข้อมูลอย่างถูกต้อง มันไม่เหมือนการเพิ่ม / ลบตามที่ @snowman กล่าวถึง ฉันต้องการทราบว่าเนื้อหาที่ฉันเขียนนั้นถูกต้อง แต่ต้องใช้ฟังก์ชั่นการอ่านที่ผ่านการทดสอบเป็นอย่างดี เมื่อฉันอ่านฉันต้องการให้แน่ใจว่าการอ่านของฉันได้สร้างวัตถุอย่างถูกต้องเท่ากับสิ่งที่เขียน; แต่นั่นต้องมีฟังก์ชั่นการเขียนที่ผ่านการทดสอบเป็นอย่างดี
10 tdd  io 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.