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

คำถามที่เกี่ยวข้องหลายเธรดรวมถึงเทคนิคโครงสร้างและปัญหาด้านความปลอดภัย

3
Parallelism หมายถึงภาวะพร้อมกัน แต่ไม่ใช่วิธีอื่น ๆ ใช่ไหม?
ฉันมักจะอ่านว่าการขนานและการเกิดพร้อมกันเป็นสิ่งที่แตกต่างกัน บ่อยครั้งที่ผู้ตอบ / ผู้แสดงความคิดเห็นไปถึงเท่าที่เขียนว่าพวกเขาทั้งสองแตกต่างกันอย่างสิ้นเชิง แต่ในมุมมองของฉันพวกเขาเกี่ยวข้องกัน แต่ฉันต้องการความกระจ่างเกี่ยวกับเรื่องนี้ ตัวอย่างเช่นถ้าผมอยู่บนซีพียูแบบมัลติคอร์และการบริหารจัดการที่จะแบ่งการคำนวณลงในxคำนวณขนาดเล็ก (พูดโดยใช้ส้อม / เข้าร่วม) แต่ละทำงานในหัวข้อของตัวเองฉันจะมีโปรแกรมที่มีทั้งการทำเช่นการคำนวณแบบขนาน (เพราะ ในเวลาใดก็ตามหลายเธรดจะทำงานในหลายคอร์) และพร้อมกันใช่ไหม? ในขณะที่ถ้าฉันเพียงแค่ใช้พูด Java และจัดการกับเหตุการณ์ UI และ repaints บน Event Dispatch Thread บวกกับการรันเธรดเดียวที่ฉันสร้างขึ้นเองฉันจะมีโปรแกรมที่ทำงานพร้อมกัน (EDT + GC เธรด + เธรดหลักของฉัน ฯลฯ ) แต่ไม่ขนาน ฉันต้องการที่จะรู้ว่าฉันได้รับสิทธินี้และหากการขนาน (ในระบบ "เดี่ยว แต่หลายแกน") หมายถึงการทำงานพร้อมกันหรือไม่? นอกจากนี้ยังมีโปรแกรมแบบมัลติเธรดที่ทำงานบนซีพียูหลายคอร์ แต่ที่ที่เธรดต่างกันกำลังทำการคำนวณที่แตกต่างกันโดยสิ้นเชิงซึ่งถือว่าเป็นการใช้ "การขนาน"?

6
ทำไม xUnit frameworks ไม่อนุญาตให้ทำการทดสอบแบบขนาน?
คุณรู้กรอบ xUnit ใด ๆ ที่อนุญาตให้รันการทดสอบแบบขนานเพื่อใช้ประโยชน์จากหลายคอร์ในเครื่องของวันนี้หรือไม่? หากไม่มี (หรือน้อยคน) ที่ทำมันอาจจะมีเหตุผล ... นั่นเป็นเพราะการทดสอบนั้นรวดเร็วมากหรือเปล่าที่คนทั่วไปไม่รู้สึกว่าจำเป็นต้องทำให้เป็นอัมพาต มีบางสิ่งที่ลึกกว่าที่ขัดขวางการกระจาย (อย่างน้อยบางส่วน) การทดสอบในหลายเธรดหรือไม่

4
มันเป็น "ผิด" / การออกแบบที่ไม่ดีที่จะนำคนงานกระทู้ / พื้นหลังในชั้นเรียนหรือไม่?
ฉันมีชั้นเรียนที่จะอ่านจาก Excel (C # และ. Net 4) และในชั้นเรียนนั้นฉันมีผู้ทำงานเบื้องหลังที่จะโหลดข้อมูลจาก Excel ในขณะที่ UI สามารถตอบสนองได้ คำถามของฉันมีดังต่อไปนี้: การออกแบบที่ไม่ดีที่จะมีคนทำงานเบื้องหลังในชั้นเรียนหรือไม่? ฉันควรสร้างชั้นเรียนโดยไม่มีมันและใช้ผู้ทำงานเบื้องหลังเพื่อทำงานในชั้นเรียนนั้นหรือไม่? ฉันไม่เห็นปัญหาใด ๆ ในการสร้างชั้นเรียนของฉันด้วยวิธีนี้ แต่จากนั้นอีกครั้งฉันเป็นมือใหม่ดังนั้นฉันจึงคิดว่าฉันจะทำให้แน่ใจก่อนที่ฉันจะดำเนินการต่อ ฉันหวังว่าคำถามนี้เกี่ยวข้องกับที่นี่เพราะฉันไม่คิดว่ามันควรจะเป็นแบบ stackoverflow เนื่องจากรหัสของฉันทำงานได้นี่เป็นเพียงปัญหาการออกแบบ

2
การนอนด้ายทำงานอย่างไร
เมื่อคุณนอนหลับสิ่งที่เกิดขึ้นจริงคืออะไร? ผมเห็นว่าการนอนหลับหัวข้อ"หยุดเธรดปัจจุบันเป็นระยะเวลาที่กำหนดของเวลา" แต่มันทำงานอย่างไร ตามที่Thread.sleep () ทำงานภายในและThread.sleep ทำงานอย่างไรจริง ๆ : ระยะเวลาสลีปจะขึ้นอยู่กับความละเอียดเฉพาะของระบบ การนอนหลับกำลังปิดกั้น เธรดออกจาก CPU และหยุดการทำงาน เธรดไม่ใช้เวลา CPU ในขณะหลับ ฉันไม่เข้าใจกลไกภายในและพื้นฐานของความหมายทั้งหมดนี้ ฉันเข้าใจว่ามีบางสิ่งที่เรียกว่าตัวกำหนดตารางเวลาที่รับผิดชอบในการสลับระหว่างเธรด ดูเหมือนแหล่งที่มาจะบ่งบอกว่าสิ่งนี้จะแตกต่างกันไปตามระบบปฏิบัติการ (หรือฮาร์ดแวร์?) และเธรดส่วนใหญ่จะได้รับ 1ms - 60ms หรือมากกว่านั้นเพื่อดำเนินการบางอย่างก่อนที่ CPU จะเปลี่ยนไปใช้เธรดอื่น แต่เมื่อเธรดหลับ (เช่นหลายวินาที) มันจะทำงานต่อได้อย่างไร? ฉันคาดเดาว่าตัวจับเวลามีส่วนเกี่ยวข้องอย่างใดอย่างหนึ่งมันเป็นนาฬิกาของเมนบอร์ดหรือไม่ มันเกี่ยวข้องกับอัตราสัญญาณนาฬิกาของ CPU หรือไม่ และแม้ว่าจะมีการจับเวลาก็ตามซีพียูรู้ได้อย่างไรว่าถึงเวลาที่ต้องใส่ใจกับเธรดอีกครั้ง มันจะไม่ต้องตรวจสอบในด้ายอย่างต่อเนื่องเพื่อดูว่ามันพร้อมหรือไม่ ไม่ได้ที่มีประสิทธิภาพการลงคะแนนเลือกตั้งและดังนั้นจึงชนิดของการจะใช้เวลานาน CPU? กำลังนอนหลับภาษาเฉพาะของเธรดหรือระบบปฏิบัติการรับผิดชอบหรือไม่หรือเป็นสิ่งที่จำเพาะกับ CPU ใครช่วยอธิบายสิ่งนี้ให้ฉันด้วยคำอธิบายพื้นฐานของสิ่งต่าง ๆ เช่นตัวกำหนดตารางเวลาและซีพียูกำลังทำอะไรอยู่ในระหว่างนี้?

3
มัลติเธรดแตกต่างกันอย่างไรในแอปพลิเคชันบนเว็บที่ใช้ Java เทียบกับแอปพลิเคชัน Java สแตนด์อะโลน
ฉันค่อนข้างใหม่สำหรับ Java และประสบการณ์ของฉันถูก จำกัด เฉพาะแอปพลิเคชันบนเว็บที่ทำงานบน Web Container (Jboss ในกรณีของฉัน) ฉันถูกต้องหรือไม่ที่บอกว่าสำหรับเว็บแอปพลิเคชั่นเว็บคอนเทนเนอร์จะดูแลมัลติเธรดหรือไม่ ถ้าเป็นเช่นนั้นฉันสามารถแนะนำดอกยางใหม่ในแอพพลิเคชั่นบนเว็บได้หรือไม่? มีข้อได้เปรียบในการทำเช่นนั้นหรือไม่และในสถานการณ์ใดที่จะต้องทำเช่นนั้น?

1
วิธีปฏิบัติที่ดีที่สุดคือไม่ต้องสำรวจความคิดเห็น ... แต่จะไม่ทำการสำรวจความคิดเห็นภายในเมื่อมีการเรียกเธรดรอ ()
สมมติว่าเรามีเธรดบางตัวที่ต้องการตรวจสอบเมื่อเธรดอื่นเสร็จสิ้นภารกิจ ฉันได้อ่านแล้วว่าเราควรเรียกใช้ฟังก์ชันการรอ () ประเภทที่จะทำให้เธรดนี้รอจนกว่าจะได้รับการแจ้งเตือนว่าเธรดอื่นเสร็จสิ้นแล้ว และนี่เป็นสิ่งที่ดีเพราะมันหมายความว่าเราไม่ได้ทำการสำรวจที่มีราคาแพง แต่การเลือกตั้งไม่เกิดขึ้นภายในระดับล่าง คือถ้าเราให้เธรดรอ () ไม่ใช่โพลที่ทำการสำรวจเพื่อตรวจสอบว่าเธรดอื่นเสร็จสิ้นแล้วหรือไม่เพื่อให้สามารถแจ้งเธรดแรกได้ ฉันคิดว่าฉันพลาดอะไรบางอย่างที่นี่ใครบางคนสามารถสอนฉันได้ไหม

2
วิธีโปรแกรมการจัดสรรเธรดบนตัวประมวลผลแบบมัลติคอร์
ฉันต้องการทดสอบกับเธรดในโปรเซสเซอร์แบบมัลติคอร์เช่นสร้างโปรแกรมที่ใช้สองเธรดที่แตกต่างกันซึ่งประมวลผลโดยแกนประมวลผลที่แตกต่างกันสองคอร์ อย่างไรก็ตามมันไม่ชัดเจนสำหรับฉันในระดับที่เธรดจะถูกจัดสรรให้กับคอร์ที่ต่างกัน ฉันสามารถจินตนาการสถานการณ์ต่อไปนี้ (ขึ้นอยู่กับระบบปฏิบัติการและการใช้ภาษาโปรแกรม): การจัดสรรเธรดได้รับการจัดการโดยระบบปฏิบัติการ เธรดถูกสร้างขึ้นโดยใช้การเรียกใช้ระบบปฏิบัติการและหากกระบวนการเกิดขึ้นกับโปรเซสเซอร์แบบมัลติคอร์ระบบปฏิบัติการจะพยายามจัดสรร / กำหนดเธรดที่แตกต่างกันโดยอัตโนมัติบนแกนที่ต่างกัน การจัดสรรเธรดได้รับการจัดการโดยการใช้ภาษาการเขียนโปรแกรม การจัดสรรเธรดให้กับคอร์อื่นต้องใช้การเรียกของระบบพิเศษ แต่ไลบรารีเธรดมาตรฐานการเขียนโปรแกรมภาษาจะจัดการสิ่งนี้โดยอัตโนมัติเมื่อฉันใช้การใช้เธรดมาตรฐานสำหรับภาษานั้น การจัดสรรเธรดต้องถูกโปรแกรมอย่างชัดเจน ในโปรแกรมของฉันฉันต้องเขียนรหัสที่ชัดเจนเพื่อตรวจสอบจำนวนคอร์ที่มีอยู่และการจัดสรรเธรดที่แตกต่างให้กับคอร์ที่แตกต่างกันโดยใช้ฟังก์ชั่นห้องสมุด เพื่อให้คำถามมีความเฉพาะเจาะจงยิ่งขึ้นลองจินตนาการว่าฉันได้เขียนแอพพลิเคชั่นแบบมัลติเธรดใน Java หรือ C ++ บน Windows หรือ Linux แอปพลิเคชันของฉันจะดูและใช้หลายคอร์อย่างน่าอัศจรรย์เมื่อทำงานบนโปรเซสเซอร์แบบมัลติคอร์หรือไม่ (เพราะทุกอย่างได้รับการจัดการโดยระบบปฏิบัติการหรือโดยเธรดไลบรารีมาตรฐาน) หรือฉันต้องแก้ไขรหัสของฉันเพื่อรับรู้ถึงหลายแกน ?

2
คำอธิบายของฉันเกี่ยวกับนางแบบนักแสดงถูกต้องหรือไม่?
ถ้าฉันเข้าใจโมเดลนักแสดงก็เหมือนโมเดลวัตถุ แต่มีความแตกต่างเล็กน้อย: วัตถุทุกตัวมีเธรดแยกต่างหากและไม่มีปัญหาแม้ว่าคุณจะมีวัตถุนับพัน นักแสดงไม่ได้มีปฏิสัมพันธ์โดยการเรียกฟังก์ชั่นและรับค่าตอบแทน แต่เป็นการส่งและรับข้อความแทน หากคุณไม่ละเมิดรูปแบบดังกล่าวแอปของคุณจะใช้การทำงานพร้อมกันให้เต็มกำลังโดยไม่มีความเสี่ยงจากสภาพการแข่งขัน ทุกสิ่งที่คุณสามารถทำได้ใน OO คุณสามารถใช้นักแสดง แต่ดีกว่าปัญหาที่ว่าทุกอย่างที่เราเขียนในปีที่ผ่านมาเป็น OO แต่การเปลี่ยนแปลงนั้นใกล้เข้ามาแล้ว ตัวอย่างเช่นสมมติว่าฉันต้องกำหนดคลาสเวกเตอร์ 3d / นักแสดงสร้างอินสแตนซ์ที่สองและเรียกใช้การดำเนินการรวมกับพวกเขา วัตถุที่มุ่งเน้น: class V3d { constructor V3d(x,y,z) //bla float x,y,z; function sum(V3d b) { return V3d(x+b.x,y+b.y,z+b.z); } } //using: mySum = V3d(1,2,3).sum(V3d(3,2,1)) //creates 2 instances, sum, returns instantly drawPoint(mySum) //uses the result รุ่นนักแสดง: actor V3d …

7
อะไรคือการใช้เธรดในการเขียนโปรแกรมอย่างเหมาะสม?
ฉันเบื่อที่จะได้ยินคนแนะนำว่าคุณควรใช้เพียงหนึ่งเธรดต่อโปรเซสเซอร์ในขณะที่หลาย ๆ โปรแกรมใช้มากถึง 100 ต่อกระบวนการ! ยกตัวอย่างบางโปรแกรมทั่วไป vb.net ide uses about 25 thread when not debugging System uses about 100 chrome uses about 19 Avira uses more than about 50 ทุกครั้งที่ฉันโพสต์คำถามที่เกี่ยวข้องกับเธรดฉันได้รับการเตือนเกือบทุกครั้งที่ฉันไม่ควรใช้มากกว่าหนึ่งเธรดต่อตัวประมวลผลและโปรแกรมทั้งหมดที่ฉันพูดถึงข้างต้นจะทำลายระบบของฉันด้วยโปรเซสเซอร์เดียว

7
ใครช่วยแนะนำโครงการสำหรับฉันเขียนเพื่อช่วยให้ฉันเข้าใจเธรด
ตอนนี้ฉันเป็นนักพัฒนา C # ด้วยความเข้าใจที่สั่นคลอนของการทำเกลียว ลิงก์ทั้งสองนี้ได้รับการแนะนำในโพสต์อื่น ๆ : http://www.yoda.arachsys.com/csharp/threads/ http://www.albahari.com/threading/ ฉันควรกลับไปสู่พื้นฐานและอาจดูตำราวิทยาการคอมพิวเตอร์บางเรื่องในเรื่องนี้หรือไม่? ฉันรู้สึกว่าถ้าฉันกระโดดเข้ามาและใช้ห้องสมุด c # ฉันจะไม่มีพื้นฐานความรู้ที่แข็งแกร่งในการสร้าง ฉันคิดว่าฉันต้องเรียนรู้เรื่องนี้ตั้งแต่เริ่มต้นเหมือนนักเรียน com sci จากนั้นใช้ห้องสมุด C # ทุกคนสามารถแนะนำวิธีการเรียนรู้การทำเกลียวบางทีอาจจะมีลิงค์และหรือความคิดโครงงานบ้าง ขอบคุณล่วงหน้า! แก้ไขขอบคุณสำหรับคำตอบทั้งหมด บางคนกล่าวว่าหนังสืออาจเป็นความคิดที่ดีใคร ๆ ก็สามารถแนะนำได้บ้าง ฉันชอบภาษาที่ไม่เชื่อเรื่องพระเจ้า ไม่มีใครรู้ว่าสิ่งที่ชั้นนี้จะครอบคลุมในการศึกษาระดับปริญญาวิทยาศาสตร์คอมพิวเตอร์? ฉันพยายาม google เพื่อรับโน้ตและการบ้านออนไลน์ฟรี

5
ฉันควรใช้จำนวนแกนประมวลผลเท่าไหร่ #cores หรือ #cores -1?
ฉันมีการคำนวณขนาดใหญ่ที่ต้องทำ ในขณะที่ฉันสามารถใช้ประโยชน์จากคอร์ทั้งหมดฉันคิดว่ามีเหตุผลอะไรที่จะละทิ้งคอร์ 1 แกนและไม่ใช้มัน (cpu การคำนวณเท่านั้นไม่มี IO) หรือฉันประเมินระบบปฏิบัติการต่ำเกินไปซึ่งไม่รู้ว่าจะจัดการและสลับบริบทที่เหมาะสมแม้ว่าฉันใช้ประโยชน์จากคอร์ทั้งหมดหรือไม่

2
คลาสในไลบรารี JRE สนับสนุนการอ่านและ / หรืออะซิงโครนัสที่อ่านได้จากชุดประกอบภายนอก / ไม่ใช่ JRE หรือไม่?
ฉันจะใช้ไลบรารีข้ามแพลตฟอร์มของฉัน (เช่นบน JRE) เพื่อดำเนินการในลักษณะที่ปลอดภัยต่อเธรดในการอ้างอิงวัตถุเพื่อให้ front-end ดั้งเดิมบนแพลตฟอร์มอื่นสามารถสังเกตวัตถุและใช้ประโยชน์จากรูปแบบที่สังเกตได้ พื้นหลังเล็กน้อย - มีแนวคิดเกี่ยวกับการเชื่อมโยงข้อมูลที่ใช้ในกรอบงานส่วนหน้า ใน C # และ Java สิ่งนี้เกี่ยวข้องกับลักษณะที่สังเกตได้ซึ่งให้คลาสความสามารถในการเริ่มเหตุการณ์เมื่อมีการเปลี่ยนแปลงเกิดขึ้นซึ่งตัวควบคุมหลายตัวหรือ "ผู้สังเกตการณ์" อาจสมัครสมาชิก วิธีนี้ผู้สังเกตการณ์ไม่จำเป็นต้องทำการสำรวจ / อ่านทรัพยากรเปรียบเทียบกับการปรับปรุง ฉันต้องการทำงานกับเครื่องมือวิเคราะห์ที่เปลี่ยนแปลงรายการข้อมูลเมื่อเวลาผ่านไป มันจะเป็นการดีที่จะสามารถให้ front-end สามารถสังเกตรายการเหล่านี้ได้ในขณะที่การวิเคราะห์กำลังทำงานอยู่ สำหรับฉันดูเหมือนว่าสิ่งนี้จะต้องใช้ส่วนหน้าเพื่อให้สามารถส่งวัตถุไปยังเครื่องมือวิเคราะห์ที่เขียนในห้องสมุดที่หวังว่าจะเป็นแบบข้ามแพลตฟอร์มและสามารถทำให้เธรดปลอดภัยอ่านวัตถุนั้นได้ มิฉะนั้นให้ห้องสมุดปฏิบัติตามสัญญาที่สังเกตได้ วิธีนี้ถูกจัดการในเอ็นจิน CLI สไตล์เก่าของ Unix คือการใช้ stdin / stdout / stderr และมีการอัพเดท post engine เป็นระยะ สิ่งนี้ต้องมีค่าใช้จ่ายมาตรฐานและการแยกวิเคราะห์ข้อความที่ฉันค่อนข้างจะหลีกเลี่ยงถ้าเป็นไปได้

7
มีความคิดผิด ๆ อะไรบ้างที่ทำให้คนไม่ชอบใช้กระทู้? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา การใช้เธรดในโปรแกรมนั้นยาก แต่ทำไมถึงมีบางคนที่จะไม่ติดตั้งแม้ว่าจะมีความต้องการที่ชัดเจน ตัวอย่าง: โปรแกรมต้องโหลดชุดข้อมูลจากฐานข้อมูลสิ่งที่ต้องทำคือทำการเชื่อมต่อและรับข้อมูลจากฐานข้อมูลในเธรดผู้ปฏิบัติงานแล้วโหลดลงใน GUI ปล่อยให้เธรด GUI ตอบสนองต่อผู้ใช้ . แต่ไม่ฉันได้พูดคุยกับคนที่ดูเหมือนจะคิดว่ากระทู้เป็นสิ่งที่ชั่วร้ายและไม่ดีและอะไรและสิ่งหนึ่งที่ควรหลีกเลี่ยงได้ทั้งหมด ฉันเคยได้ยินว่าอาจารย์บางคนแนะนำให้ใช้เธรดดังนั้นจึงไม่ต้องการครอบคลุมการใช้งาน อะไร??? เมื่อฮาร์ดแวร์เข้าสู่มัลติคอร์ฉันคิดว่าเราต้องเข้าใจเธรดให้ดีขึ้นและไม่กลัวที่จะใช้มัน ฉันพบว่ามันเป็นวิชาที่น่าสนใจเป็นการส่วนตัว ดังนั้นสิ่งที่คุณได้ยินเกี่ยวกับเธรดที่เป็นเท็จคืออะไร

5
จะป้องกันผู้ใช้สองคนจากการลงทะเบียนในเวลาเดียวกันด้วยชื่อผู้ใช้เดียวกันได้อย่างไร?
เราไม่สามารถทำให้เป็นอนุกรมการลงทะเบียนเนื่องจากมีผู้ใช้หลายล้านคนลงทะเบียนในเวลาเดียวกัน การลงทะเบียนแบบขนานต้องเกิดขึ้น สมมติว่าฐานข้อมูลไม่มีชื่อผู้ใช้ 'user1' เมื่อผู้ใช้สองคนพยายามที่จะลงทะเบียนในเวลาเดียวกันด้วย 'user1' ก็จะยอมรับมัน แต่จะทำให้เกิดปัญหาในภายหลัง สิ่งนี้ไม่ควรเกิดขึ้น ฉันกำลังมองหาวิธีแก้ปัญหาเชิงตรรกะ ไม่เฉพาะเจาะจง แค่ความคิดที่จะแก้ปัญหานี้

4
กระบวนการหรือเธรดของซอมบี้คืออะไร
กระบวนการหรือเธรดของซอมบี้คืออะไรและสร้างขึ้นมาอย่างไร ฉันเพิ่งจะฆ่าพวกเขาหรือฉันจะทำอะไรบางอย่างเพื่อรับการวินิจฉัยเกี่ยวกับวิธีการที่พวกเขาตาย?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.