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

30
การไม่บล็อกการอ่านบน subprocess.PIPE ใน python
ฉันใช้โมดูลย่อยเพื่อเริ่มกระบวนการย่อยและเชื่อมต่อกับเอาต์พุตสตรีม (stdout) ฉันต้องการที่จะรันการอ่านที่ไม่บล็อกบน stdout มีวิธีที่จะทำให้. non-block หรือตรวจสอบว่ามีข้อมูลในสตรีมก่อนที่ฉันจะเรียกใช้.readlineหรือไม่ ฉันต้องการให้อุปกรณ์พกพาหรืออย่างน้อยต้องทำงานภายใต้ Windows และ Linux นี่คือวิธีที่ฉันทำตอนนี้ (มันปิดกั้น.readlineหากไม่มีข้อมูล): p = subprocess.Popen('myprogram.exe', stdout = subprocess.PIPE) output_str = p.stdout.readline()

16
การโทร jdbc แบบอะซิงโครนัสเป็นไปได้หรือไม่?
ฉันสงสัยว่ามีวิธีการโทรแบบอะซิงโครนัสกับฐานข้อมูลหรือไม่? ตัวอย่างเช่นลองนึกภาพว่าฉันมีคำขอใหญ่ ๆ ที่ต้องใช้เวลานานในการประมวลผลฉันต้องการส่งคำขอและรับการแจ้งเตือนเมื่อคำขอนั้นส่งคืนค่า (โดยส่งผู้ฟัง / ติดต่อกลับหรือบางอย่าง) ฉันไม่ต้องการบล็อครอให้ฐานข้อมูลตอบ ฉันไม่คิดว่าการใช้กลุ่มของเธรดเป็นวิธีแก้ปัญหาเพราะมันไม่ได้ปรับขนาดในกรณีที่มีการร้องขอที่เกิดขึ้นพร้อมกันจำนวนมากสิ่งนี้จะทำให้เกิดเธรดจำนวนมาก เรากำลังประสบปัญหานี้กับเซิร์ฟเวอร์เครือข่ายและเราพบวิธีแก้ปัญหาโดยใช้การเรียกระบบเลือก / แบบสำรวจ / epoll เพื่อหลีกเลี่ยงการมีหนึ่งเธรดต่อการเชื่อมต่อ ฉันแค่สงสัยว่าจะมีคุณสมบัติที่คล้ายกับคำขอฐานข้อมูลได้อย่างไร หมายเหตุ: ฉันทราบว่าการใช้ FixedThreadPool อาจเป็นการแก้ไขที่ดี แต่ฉันประหลาดใจที่ไม่มีใครพัฒนาระบบแบบอะซิงโครนัสจริงๆ (โดยไม่ต้องใช้เธรดพิเศษ) ** ปรับปรุง ** เพราะการขาดของการแก้ปัญหาในทางปฏิบัติจริงที่ฉันตัดสินใจที่จะสร้างห้องสมุด (ส่วนหนึ่งของ finagle) ตัวเอง: finagle-MySQL โดยทั่วไปจะทำการถอดรหัส / ถอดรหัสการร้องขอ / ตอบกลับ mysql และใช้ Finagle / Netty ภายใต้ประทุน มันปรับขนาดได้อย่างดีเยี่ยมแม้จะมีการเชื่อมต่อจำนวนมาก

9
วิธีที่ง่ายที่สุดในการยิงและลืมวิธีใน C #?
ฉันเห็นใน WCF พวกเขามี[OperationContract(IsOneWay = true)]คุณลักษณะ แต่ดูเหมือนว่า WCF จะช้าและหนักเพียงแค่สร้างฟังก์ชั่นที่ไม่บล็อก โดยหลักการแล้วจะมีบางสิ่งบางอย่างเช่นสเตจโมฆะที่ไม่มีการปิดกั้นMethodFoo(){}แต่ฉันไม่คิดว่ามีอยู่จริง วิธีที่เร็วที่สุดในการสร้างการเรียกใช้เมธอดที่ไม่ใช่บล็อกใน C # คืออะไร? เช่น class Foo { static void Main() { FireAway(); //No callback, just go away Console.WriteLine("Happens immediately"); } static void FireAway() { System.Threading.Thread.Sleep(5000); Console.WriteLine("5 seconds later"); } } หมายเหตุ : ทุกคนที่อ่านสิ่งนี้ควรพิจารณาว่าพวกเขาต้องการวิธีการให้เสร็จหรือไม่ (ดู # 2 คำตอบยอดนิยม) หากวิธีการจะต้องเสร็จสิ้นในบางสถานที่เช่นแอปพลิเคชัน ASP.NET คุณจะต้องทำอะไรบางอย่างเพื่อป้องกันและรักษาเธรดให้มีชีวิตอยู่ …
150 c#  .net  nonblocking 

2
อะไรคือการไม่ปิดกั้นหรือ I / O ไม่ตรงกันใน Node.js?
ในบริบทของเอ็นจิ้นฝั่งเซิร์ฟเวอร์ Javascript สิ่งที่ไม่บล็อก I / O หรืออะซิงโครนัส I / O คืออะไร ฉันเห็นนี้ถูกกล่าวถึงว่าเป็นข้อได้เปรียบกว่าการใช้งานด้านเซิร์ฟเวอร์ Java

9
I / O แบบไม่ปิดกั้นเร็วกว่า I / O การบล็อกแบบมัลติเธรดจริงหรือไม่ อย่างไร?
ฉันค้นหาเว็บเกี่ยวกับรายละเอียดทางเทคนิคบางอย่างเกี่ยวกับการบล็อก I / O และการไม่บล็อก I / O และพบว่ามีหลายคนที่ระบุว่า I / O ที่ไม่ปิดกั้นจะเร็วกว่าการบล็อก I / O ตัวอย่างเช่นในเอกสารนี้ หากฉันใช้การบล็อก I / O แน่นอนว่าเธรดที่ถูกบล็อกในขณะนี้จะไม่สามารถทำอย่างอื่นได้ ... เพราะถูกบล็อก แต่ทันทีที่เธรดเริ่มถูกบล็อก OS สามารถเปลี่ยนไปใช้เธรดอื่นและไม่เปลี่ยนกลับจนกว่าเธรดที่ถูกบล็อกจะมีบางอย่าง ตราบใดที่มีเธรดอื่นในระบบที่ต้องการ CPU และไม่ถูกบล็อกก็ไม่ควรมีเวลาว่างของ CPU อีกต่อไปเมื่อเทียบกับวิธีการไม่บล็อกตามเหตุการณ์หรือไม่? นอกเหนือจากการลดเวลาที่ CPU ไม่ได้ใช้งานแล้วฉันยังเห็นอีกหนึ่งทางเลือกในการเพิ่มจำนวนงานที่คอมพิวเตอร์สามารถทำได้ในกรอบเวลาที่กำหนด: ลดค่าใช้จ่ายที่แนะนำโดยการสลับเธรด แต่จะทำได้อย่างไร? และค่าใช้จ่ายสูงพอที่จะแสดงเอฟเฟกต์ที่วัดได้หรือไม่? นี่คือแนวคิดเกี่ยวกับวิธีการที่ฉันสามารถวาดภาพได้: ในการโหลดเนื้อหาของไฟล์แอปพลิเคชันจะมอบหมายงานนี้ให้กับเฟรมเวิร์ก i / o ตามเหตุการณ์โดยส่งผ่านฟังก์ชันเรียกกลับพร้อมกับชื่อไฟล์ เฟรมเวิร์กเหตุการณ์มอบหมายให้กับระบบปฏิบัติการซึ่งตั้งโปรแกรมคอนโทรลเลอร์ DMA ของฮาร์ดดิสก์เพื่อเขียนไฟล์ลงในหน่วยความจำโดยตรง เฟรมเวิร์กเหตุการณ์อนุญาตให้เรียกใช้โค้ดเพิ่มเติมได้ เมื่อเสร็จสิ้นการคัดลอกจากดิสก์สู่หน่วยความจำตัวควบคุม DMA …

2
จะใช้ Tornado เมื่อใดและอย่างไร ไร้ประโยชน์เมื่อไหร่
โอเค Tornado ไม่ปิดกั้นและค่อนข้างเร็วและสามารถจัดการคำขอยืนจำนวนมากได้อย่างง่ายดาย แต่ฉันเดาว่ามันไม่ใช่กระสุนเงินและถ้าเราแค่เรียกใช้ Django-based หรือไซต์อื่น ๆ ที่มี Tornado แบบสุ่มสี่สุ่มห้ามันจะไม่เพิ่มประสิทธิภาพใด ๆ ฉันไม่พบคำอธิบายที่ครอบคลุมเกี่ยวกับเรื่องนี้ดังนั้นฉันจึงถามที่นี่: ควรใช้ Tornado เมื่อใด ไร้ประโยชน์เมื่อไหร่ เมื่อใช้มันควรคำนึงถึงอะไรบ้าง? เราจะสร้างไซต์ที่ไม่มีประสิทธิภาพโดยใช้ Tornado ได้อย่างไร? มีเซิร์ฟเวอร์และเว็บเฟรมเวิร์ค เราควรใช้กรอบงานเมื่อใดและเราจะแทนที่ด้วยกรอบงานอื่นได้เมื่อใด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.