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

4
หัวข้อใดที่แบ่งปันกันโดยทั่วไป
นี่เป็นคำถามทั่วไป และถ้าใครต้องการทำให้การใช้งานเฉพาะเจาะจงฉันจะชอบสิ่งที่เกี่ยวข้องกับ Unix แต่ก่อนอื่นต้องรู้ปัญหาต่อไปนี้โดยทั่วไป: ฉันอ่านกระบวนการเดียวสามารถมีหลายเธรด หลายเธรดของกระบวนการเดียวกันจะแบ่งปันสิ่งต่าง ๆ ในหมู่พวกเขา ฉันต้องการที่จะรู้ว่าสิ่งที่พวกเขาแบ่งปันและสิ่งที่ไม่ กระบวนการพิจารณาประกอบด้วยพื้นที่ที่อยู่, สแต็ค, กอง, ตัวแปรทั่วโลก, รหัส, ข้อมูล, ทรัพยากรระบบปฏิบัติการสิ่งที่ในหมู่พวกเขาร่วมกันโดยกระทู้? ฉันมีการคาดเดาต่อไปนี้: ตัวแปรทั่วโลก -ฉันได้อ่านหัวข้อแบ่งปันตัวแปรทั่วโลก ในขณะที่การเขียนโปรแกรมใน Java และ C # ฉันได้ทำเธรดเพื่อแบ่งปันตัวแปรระดับชั้นเรียน ดังนั้นฉันจึงเชื่อว่าเธรดจะแชร์ตัวแปรทั่วโลก (แต่ไม่แน่ใจว่าแนวคิดในภาษาการเขียนโปรแกรมระดับสูงแปลว่าเป็นข้อเท็จจริงระดับระบบปฏิบัติการต่ำหรือไม่) ฮีป -เนื่องจากตัวแปรโกลบอลถูกเก็บไว้ในฮีปฮีปจะถูกแชร์ระหว่างเธรด สแต็ค -เนื่องจากแต่ละเธรดสามารถมีลำดับการเรียกใช้ / โค้ดของตัวเองได้จึงต้องมีสแต็กของตัวเองซึ่งมันอาจจะผลัก / ป๊อปอัพเนื้อหาของโปรแกรมตัวนับ (เมื่อพูดว่าการเรียกใช้ฟังก์ชัน ดังนั้นเธรดของกระบวนการเดียวกันจะไม่แชร์สแต็ก ตอนนี้ฉันไม่แน่ใจเกี่ยวกับการแบ่งปันสิ่งต่อไปนี้ พื้นที่ที่อยู่ -ไม่แน่ใจว่าสิ่งที่นับว่าอยู่ภายใต้พื้นที่ที่อยู่ แต่ฉันคิดว่าพื้นที่ที่อยู่โดยทั่วไปจะใช้ในบริบทของกระบวนการไม่ใช่เธรด และเนื่องจากเธรดทั้งหมดของกระบวนการเดียวกันอยู่ในพื้นที่แอดเดรสเดียวกันกับกระบวนการพาเรนต์จึงมีการกล่าวว่าเธรดใช้พื้นที่ที่อยู่ร่วมกัน (แต่พวกเขาจะรักษาสแต็คที่แตกต่างกันภายในพื้นที่ที่อยู่เดียวกันได้หรือไม่) ทรัพยากรระบบปฏิบัติการ -ฉันคิดว่านี่อาจเป็นการใช้งานเฉพาะอย่างยิ่ง ตัวอย่างเช่นกระบวนการหลักสามารถเลือกให้การจัดการไฟล์เดียวกันกับบางส่วนของเธรดและไม่ให้ทั้งหมด หรือฉันเข้าใจผิดและทรัพยากรระบบปฏิบัติการหมายถึงอย่างอื่นที่ไม่ใช่ไฟล์? รหัส -เธรดสามารถมีรหัสที่แตกต่างกันได้ดังนั้นรหัสที่ใช้ร่วมกันอาจไม่เป็นเช่นนั้นเสมอไป ข้อมูล …

3
ทำไมการใช้งาน mutex ส่วนใหญ่จึงไม่ยุติธรรม?
ความเข้าใจของฉันคือการใช้งาน mutex ที่นิยมมากที่สุด (เช่น std :: mutex ใน C ++) ไม่รับประกันความเป็นธรรม - นั่นคือพวกเขาไม่รับประกันว่าในกรณีของการช่วงชิงการล็อคจะถูกรับโดยเธรดตามลำดับที่พวกเขา เรียกว่าล็อค () ในความเป็นจริงมันเป็นไปได้ (แม้จะหวังว่าผิดปกติ) ว่าในกรณีที่มีการโต้แย้งสูงบางกระทู้ที่รอรับ mutex อาจไม่เคยได้รับ นี่ดูเหมือนว่าพฤติกรรมที่ไม่ช่วยเหลือฉัน - ดูเหมือนว่า mutex ที่ยุติธรรมจะให้ผลการทำงานที่สอดคล้องกับสิ่งที่โปรแกรมเมอร์ต้องการ / คาดหวัง เหตุผลที่กำหนดว่าทำไมโดยทั่วไปแล้วการใช้งาน mutex จะไม่ถูกนำมาใช้เพื่อความยุติธรรมคือ "ประสิทธิภาพ" แต่ฉันต้องการทำความเข้าใจให้ดีขึ้นว่าอะไรคือความหมาย - โดยเฉพาะอย่างยิ่งการผ่อนคลายข้อกำหนดความเป็นธรรมของ mutex จะปรับปรุงประสิทธิภาพอย่างไร ดูเหมือนว่า mutex ที่ "ยุติธรรม" จะใช้งานได้ง่ายเพียงแค่มี lock () ต่อท้ายเธรดการเรียกไปยังส่วนท้ายของรายการที่เชื่อมโยงของ mutex ก่อนที่จะวางเธรดเข้าสู่โหมดสลีปแล้วปลดล็อก () ป๊อปเธรดถัดไปจาก หัวของรายการเดียวกันนั้นและปลุกมันขึ้นมา ฉันขาดความเข้าใจในการใช้งาน …

1
ทำไมการใช้ Hyper-threading จึงทำให้ประสิทธิภาพลดลง
ฉันได้อ่านมันในสถานที่ต่าง ๆ เช่นนี้แล้วการทำไฮเปอร์เธรดทำให้ประสิทธิภาพลดลง ฉันไม่สามารถหาสาเหตุหรือวิธีการไฮเปอร์เธรดที่นำไปสู่ความเสื่อมโทรม ทำไมถึงเป็นเช่นนั้นแม้เมื่อ Hyper-threading อนุญาตให้ระบบปฏิบัติการใช้ทรัพยากรฟรีการสลายตัวก็เกิดขึ้น แม้ว่าการวัดประสิทธิภาพจะบ่งบอกถึงการทำเกลียวมากเกินไปว่าเป็นผู้ร้าย แต่ใครบางคนสามารถอธิบายเหตุผลของเรื่องนี้ให้ฉันได้ ขอบคุณ

3
เป็นไปได้ที่จะพิสูจน์ความปลอดภัยของด้ายหรือไม่
ให้โปรแกรมประกอบด้วยตัวแปรและคำแนะนำที่แก้ไขตัวแปรเหล่านี้และดั้งเดิมการซิงโครไนซ์ (จอภาพ, mutex, การซิงโครไนส์ของ java หรือการล็อกของ C #) เป็นไปได้ไหมที่จะพิสูจน์ว่าโปรแกรมดังกล่าวปลอดภัยหรือไม่? มีรูปแบบที่เป็นทางการสำหรับอธิบายสิ่งต่าง ๆ เช่นความปลอดภัยของด้ายหรือสภาพการแข่งรถหรือไม่?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.