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


5
การล็อก mutex ที่ปลดล็อกมีประสิทธิภาพเพียงใด Mutex มีราคาเท่าใด
ในภาษาระดับต่ำ (C, C ++ หรืออะไรก็ตาม): ฉันมีตัวเลือกระหว่างการมี mutexes หลายอัน (เช่น pthread ให้ฉันหรืออะไรก็ตามที่ไลบรารี่ของระบบดั้งเดิมจัดหาให้) หรืออันเดียวสำหรับวัตถุ มันมีประสิทธิภาพแค่ไหนในการล็อค mutex? คือมีกี่คำสั่งแอสเซมเบลอร์และโอกาสที่จะใช้เวลาเท่าไหร่ (ในกรณีที่มีการปลดล็อค mutex) Mutex มีค่าใช้จ่ายเท่าไหร่ เป็นปัญหาหรือไม่ที่จะมีmutex จำนวนมากจริงๆ หรือฉันสามารถโยนตัวแปร mutex ให้มากที่สุดเท่าที่ฉันมีได้ในintตัวแปรและมันก็ไม่สำคัญอะไร (ฉันไม่แน่ใจว่าความแตกต่างระหว่างฮาร์ดแวร์ต่างกันมากแค่ไหนถ้ามีฉันอยากรู้เกี่ยวกับมันด้วย แต่ส่วนใหญ่ฉันสนใจฮาร์ดแวร์ทั่วไป) ประเด็นก็คือโดยการใช้ mutex หลายตัวซึ่งแต่ละส่วนครอบคลุมเพียงส่วนหนึ่งของวัตถุแทนที่จะเป็น mutex เดียวสำหรับวัตถุทั้งหมดฉันสามารถป้องกันได้หลายบล็อก และฉันสงสัยว่าฉันควรจะไปไกลแค่ไหนกับเรื่องนี้ คือฉันควรพยายามที่จะป้องกันบล็อคที่เป็นไปได้จริง ๆ เท่าที่จะเป็นไปได้ไม่ว่าจะซับซ้อนกว่านี้มากเท่าใด การโพสต์บล็อกของ WebKits (2016) เกี่ยวกับการล็อคนั้นเกี่ยวข้องกับคำถามนี้มากและอธิบายความแตกต่างระหว่าง spinlock, ล็อคปรับตัว, futex และอื่น ๆ

8
ฉันจะขัดจังหวะวิธี ServerSocket accept () ได้อย่างไร?
ในเธรดหลักของฉันฉันมีการwhile(listening)วนรอบซึ่งเรียกaccept()บนวัตถุ ServerSocket ของฉันจากนั้นเริ่มเธรดไคลเอนต์ใหม่และเพิ่มลงในคอลเลกชันเมื่อยอมรับไคลเอนต์ใหม่ ฉันยังมีเธรดผู้ดูแลระบบที่ฉันต้องการใช้ในการออกคำสั่งเช่น 'exit' ซึ่งจะทำให้เธรดไคลเอนต์ทั้งหมดถูกปิดตัวเองปิดตัวเองและปิดเธรดหลักโดยเปลี่ยนการฟังเป็นเท็จ อย่างไรก็ตามการaccept()โทรในwhile(listening)บล็อกวนซ้ำและดูเหมือนจะไม่มีทางขัดขวางดังนั้นจึงไม่สามารถตรวจสอบเงื่อนไขในขณะที่อีกครั้งและโปรแกรมไม่สามารถออกได้! มีวิธีที่ดีกว่าในการทำเช่นนี้? หรือวิธีการขัดจังหวะวิธีการบล็อก?

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