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

มัลติเธรดคือความสามารถของคอมพิวเตอร์หรือโปรแกรมในการทำงานพร้อมกันหรือแบบอะซิงโครนัสโดยใช้การประมวลผลหลายกระแสพร้อมกัน (โดยทั่วไปเรียกว่าเธรด)

3
Parallel.ForEach () vs. foreach (IEnumerable <T> .AsParallel ())
เอ๋อฉันพยายามค้นหาสองวิธีนี้ใน BCL โดยใช้ Reflector แต่หาไม่พบ ข้อแตกต่างระหว่างสองตัวอย่างนี้คืออะไร A: IEnumerable&lt;string&gt; items = ... Parallel.ForEach(items, item =&gt; { ... }); B: IEnumerable&lt;string&gt; items = ... foreach (var item in items.AsParallel()) { ... } มีผลที่แตกต่างจากการใช้อย่างใดอย่างหนึ่งมากกว่าอื่น ๆ ? (สมมติว่าสิ่งที่ฉันทำในเนื้อหาที่มีวงเล็บของทั้งสองตัวอย่างนั้นปลอดภัยสำหรับเธรด)

11
“ Java DateFormat ไม่ใช่ threadsafe” สิ่งนี้นำไปสู่อะไร
ทุกคนควรระวังเกี่ยวกับ Java DateFormat ที่ไม่ได้เป็นเธรดที่ปลอดภัยและฉันเข้าใจแนวคิดในทางทฤษฎี แต่ฉันไม่สามารถมองเห็นปัญหาที่แท้จริงที่เราสามารถเผชิญได้เนื่องจากปัญหานี้ บอกว่าฉันเป็นเขตข้อมูล DateFormat ในชั้นเรียนและมีการใช้วิธีเดียวกันในชั้นเรียน (การจัดรูปแบบวันที่) ในสภาพแวดล้อมแบบมัลติเธรด สาเหตุนี้จะ: ข้อยกเว้นใด ๆ เช่นข้อยกเว้นรูปแบบ ความคลาดเคลื่อนของข้อมูล ปัญหาอื่น ๆ ? นอกจากนี้โปรดอธิบายว่าทำไม

7
จำนวนเธรดสูงสุดในแอพ. NET?
จำนวนเธรดสูงสุดที่คุณสามารถสร้างในแอปพลิเคชัน C # คือเท่าใด และจะเกิดอะไรขึ้นเมื่อคุณมาถึงขีด จำกัด นี้? มีการโยนข้อยกเว้นบางประเภทหรือไม่?
143 c#  .net  multithreading 

5
การจับทางเลือก Node JS เพื่อทำมัลติเธรด
ถ้าฉันเข้าใจถูกต้องโหนด JS นั้นไม่บล็อก ... ดังนั้นแทนที่จะรอการตอบสนองจากฐานข้อมูลหรือกระบวนการอื่นมันย้ายไปยังสิ่งอื่นและตรวจสอบอีกครั้งในภายหลัง นอกจากนี้ยังเป็นเธรดเดียว ทั้งหมดนี้หมายความว่ากระบวนการ Node JS ที่กำหนดสามารถใช้ CPU แกนเดี่ยวอย่างเต็มรูปแบบและมีประสิทธิภาพ แต่จะไม่ใช้แกนอื่น ๆ บนเครื่องเช่นเดียวกับในมันจะไม่ใช้มากกว่าหนึ่งครั้ง หลักสูตรนี้หมายความว่า CPU อื่นยังคงสามารถใช้งานโดยกระบวนการอื่นสำหรับสิ่งต่าง ๆ เช่นฐานข้อมูล SQL หรือรูทีนย่อย CPU Heavy ที่คั่นด้วยเจตนาอื่น ๆ ตราบใดที่มันเป็นกระบวนการแยกต่างหาก นอกจากนี้ในกรณีที่กระบวนการ Node JS มีการวนซ้ำไม่รู้จบหรือฟังก์ชั่นการทำงานที่ยาวนานกระบวนการนั้นจะไม่มีประโยชน์ในทางใด ๆ จนกว่าการวนซ้ำไม่รู้จบหรือฟังก์ชั่นการทำงานยาวจะหยุดลง (หรือกระบวนการทั้งหมดถูกฆ่า) ถูกต้องไหม ฉันถูกต้องในการทำความเข้าใจของฉัน?

9
ข้อความสั่งคืนควรอยู่ภายในหรือด้านนอกล็อคหรือไม่?
ฉันเพิ่งรู้ว่าในบางแห่งในรหัสของฉันฉันมีคำสั่งส่งคืนภายในล็อคและบางครั้งข้างนอก อันไหนดีที่สุด? 1) void example() { lock (mutex) { //... } return myData; } 2) void example() { lock (mutex) { //... return myData; } } ฉันควรใช้อันไหนดี
142 c#  .net  multithreading  mutex 

17
มัลติเธรด: อะไรคือจุดของเธรดที่มากกว่าคอร์?
ฉันคิดว่าจุดของคอมพิวเตอร์แบบมัลติคอร์คือมันสามารถรันหลายเธรดพร้อมกันได้ ในกรณีนั้นถ้าคุณมีเครื่อง quad-core จุดที่มีเธรดมากกว่า 4 เธรดทำงานอยู่ในเวลาใด พวกเขาจะไม่เพียงขโมยเวลา (ทรัพยากร CPU) จากกันและกันหรือไม่

8
การตรวจสอบเธรดปลอดภัยหรือไม่
ฉันรู้ว่าการดำเนินการผสมเช่นi++ไม่ปลอดภัยตามที่พวกเขาเกี่ยวข้องกับการดำเนินงานหลาย ๆ แต่การตรวจสอบการอ้างอิงด้วยตัวเองเป็นการดำเนินการที่ปลอดภัยของเธรดหรือไม่ a != a //is this thread-safe ฉันพยายามเขียนโปรแกรมนี้และใช้หลายเธรด แต่ก็ไม่ได้ล้มเหลว ฉันเดาว่าฉันไม่สามารถจำลองการแข่งขันบนเครื่องของฉันได้ แก้ไข: public class TestThreadSafety { private Object a = new Object(); public static void main(String[] args) { final TestThreadSafety instance = new TestThreadSafety(); Thread testingReferenceThread = new Thread(new Runnable() { @Override public void run() { long countOfIterations = …


8
SynchronizationContext ทำอะไร
ในหนังสือ Programming C # มีโค้ดตัวอย่างเกี่ยวกับSynchronizationContext: SynchronizationContext originalContext = SynchronizationContext.Current; ThreadPool.QueueUserWorkItem(delegate { string text = File.ReadAllText(@"c:\temp\log.txt"); originalContext.Post(delegate { myTextBox.Text = text; }, null); }); ฉันเป็นมือใหม่ในการตั้งกระทู้ดังนั้นโปรดตอบโดยละเอียด ก่อนอื่นฉันไม่รู้ว่าบริบทหมายถึงอะไรโปรแกรมบันทึกoriginalContextอะไรใน? และเมื่อPostเมธอดถูกไล่ออกเธรด UI จะทำอย่างไร? ถ้าฉันถามเรื่องโง่ ๆ โปรดแก้ไขฉันด้วยขอบคุณ! แก้ไข: ตัวอย่างเช่นถ้าฉันเขียนmyTextBox.Text = text;ใน method ความแตกต่างคืออะไร?
140 c#  .net  multithreading 


13
วิธีการสื่อสารความแตกต่างระหว่างการเขียนโปรแกรมไม่ตรงกันและขนาน?
หลายแพลตฟอร์มส่งเสริมการทำงานแบบอะซิงโครนัสและการขนานซึ่งเป็นวิธีการปรับปรุงการตอบสนอง ฉันเข้าใจความแตกต่างโดยทั่วไป แต่มักจะพบว่ามันยากที่จะพูดออกมาในใจของฉันเองเช่นเดียวกับคนอื่น ๆ ฉันเป็นโปรแกรมเมอร์ทำงานและใช้ async &amp; callbacks ค่อนข้างบ่อย ความเท่าเทียมนั้นให้ความรู้สึกแปลกใหม่ แต่ฉันรู้สึกว่าพวกเขาสับสนง่ายโดยเฉพาะในระดับการออกแบบภาษา จะรักคำอธิบายที่ชัดเจนว่าพวกเขาเกี่ยวข้อง (หรือไม่) และชั้นเรียนของโปรแกรมที่แต่ละโปรแกรมที่ดีที่สุด

1
วิธีการรับ Thread.Sleep รอ?
ฉันกำลังเขียนแอปพลิเคชันที่เชื่อมโยงเครือข่ายโดยยึดตามกระบวนทัศน์ที่รอคอย / การนอนหลับ บางครั้งเกิดข้อผิดพลาดในการเชื่อมต่อและจากประสบการณ์ของฉันมันจ่ายเพื่อรอเวลาแล้วลองอีกครั้ง ปัญหาคือว่าถ้าฉันใช้ Thread.Sleep หรือการดำเนินการปิดกั้นที่คล้ายกันอื่นในการรอคอย / async จะบล็อกกิจกรรมทั้งหมดในเธรดผู้โทร สิ่งที่ฉันควรแทนที่ Thread.Sleep (10,000) ด้วยเพื่อให้ได้ผลเช่นเดียวกับ await Thread.SleepAsync(10000) ? UPDATE ฉันต้องการคำตอบที่ทำได้โดยไม่ต้องสร้างกระทู้เพิ่มเติม

5
ทำไม Can CancelToken จึงแยกจาก Can CancelTokenSource
ฉันกำลังมองหาเหตุผลว่าทำไม. NET CancellationTokenstruct จึงถูกนำมาใช้นอกเหนือจากCancellationTokenSourceคลาส ฉันเข้าใจวิธีการใช้ API แต่ต้องการเข้าใจด้วยว่าเหตุใดจึงออกแบบมาเช่นนั้น กล่าวคือทำไมเราถึงมี: var cts = new CancellationTokenSource(); SomeCancellableOperation(cts.Token); ... public void SomeCancellableOperation(CancellationToken token) { ... token.ThrowIfCancellationRequested(); ... } แทนที่จะส่งผ่านโดยตรงCancellationTokenSourceเช่น: var cts = new CancellationTokenSource(); SomeCancellableOperation(cts); ... public void SomeCancellableOperation(CancellationTokenSource cts) { ... cts.ThrowIfCancellationRequested(); ... } นี่เป็นการเพิ่มประสิทธิภาพตามข้อเท็จจริงที่ว่าการตรวจสอบสถานะการยกเลิกเกิดขึ้นบ่อยกว่าการส่งโทเค็นรอบ ๆ หรือไม่ เพื่อให้CancellationTokenSourceสามารถติดตามและอัปเดตCancellationTokensและสำหรับแต่ละโทเค็นการตรวจสอบการยกเลิกคือการเข้าถึงฟิลด์ภายในหรือไม่? เนื่องจากบูลที่ระเหยได้โดยไม่มีการล็อคก็เพียงพอแล้วในทั้งสองกรณีฉันยังไม่เห็นว่าทำไมถึงเร็วขึ้น ขอบคุณ!

12
การรับค่าจาก java.util.HashMap นั้นปลอดภัยจากหลายเธรดหรือไม่?
มีกรณีที่แผนที่จะถูกสร้างขึ้นและเมื่อมีการเริ่มต้นมันจะไม่ถูกแก้ไขอีกครั้ง อย่างไรก็ตามจะสามารถเข้าถึงได้ (ผ่านรับ (คีย์) เท่านั้น) จากหลายเธรด วิธีนี้ปลอดภัยไหมที่จะใช้java.util.HashMap? (ปัจจุบันฉันใช้อย่างมีความสุขjava.util.concurrent.ConcurrentHashMapและไม่จำเป็นต้องวัดเพื่อปรับปรุงประสิทธิภาพ แต่ฉันแค่อยากรู้อยากเห็นว่าเรียบง่ายHashMapพอเพียงดังนั้นคำถามนี้ไม่ใช่ "ฉันควรใช้อันไหนดี?" และไม่ใช่คำถามประสิทธิภาพ ค่อนข้างคำถามคือ "จะปลอดภัยหรือไม่")

6
เธรด Java Static initializers ปลอดภัยหรือไม่
ฉันใช้บล็อกรหัสคงที่เพื่อเริ่มต้นตัวควบคุมบางตัวในรีจิสทรีที่ฉันมี ดังนั้นคำถามของฉันคือฉันสามารถรับประกันได้หรือไม่ว่าบล็อกรหัสคงที่นี้จะถูกเรียกใช้เพียงครั้งเดียวเมื่อโหลดคลาสครั้งแรก ฉันเข้าใจว่าฉันไม่สามารถรับประกันได้ว่าจะเรียกบล็อกโค้ดนี้เมื่อใดฉันคาดเดาว่าเมื่อใดที่ Classloader โหลดครั้งแรก ฉันรู้ว่าฉันสามารถซิงโครไนซ์กับคลาสในบล็อกโค้ดแบบคงที่ได้ แต่ฉันเดาว่านี่คือสิ่งที่เกิดขึ้นจริงหรือ? ตัวอย่างโค้ดง่ายๆจะเป็น; class FooRegistry { static { //this code must only ever be called once addController(new FooControllerImpl()); } private static void addController(IFooController controller) { // ... } } หรือฉันควรทำเช่นนี้ class FooRegistry { static { synchronized(FooRegistry.class) { addController(new FooControllerImpl()); } } private static void addController(IFooController …

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