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

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

4
จะติดตามกระบวนการย่อยโดยใช้ strace ได้อย่างไร?
ฉันเคยstraceแนบไปกับกระบวนการสั้น ๆ กระบวนการสร้าง 90 เธรด เมื่อฉันพบเธรดที่ไม่เหมาะสมฉันต้องค้นหาเธรดแม่อย่างน่าเบื่อจากนั้นเธรดปู่ย่าตายายและอื่น ๆ ไปจนถึงกระบวนการรูท มีเคล็ดลับหรือเครื่องมือในการค้นหาว่าเธรดใดสร้างเธรดอื่นอย่างรวดเร็วหรือไม่? หรือยังดีกว่าพิมพ์ต้นไม้แห่งการสร้างเธรดเช่นpstree?

7
Mutexes จำเป็นใน JavaScript หรือไม่?
ฉันได้เห็นลิงค์นี้: การดำเนินการร่วมกันยกเว้นใน JavaScript ในทางกลับกันฉันได้อ่านว่าไม่มีเธรดในจาวาสคริปต์ แต่นั่นหมายความว่าอย่างไร? เมื่อเหตุการณ์เกิดขึ้นพวกเขาสามารถขัดจังหวะได้ที่ไหนในโค้ด และถ้าไม่มีเธรดใน JS ฉันจำเป็นต้องใช้ mutexes ใน JS หรือไม่? โดยเฉพาะอย่างยิ่งฉันสงสัยเกี่ยวกับผลกระทบของการใช้ฟังก์ชันที่เรียกโดยsetTimeout()และXmlHttpRequestของonreadystatechangeตัวแปรที่เข้าถึงได้ทั่วโลก

5
Java Regex Thread ปลอดภัยหรือไม่
ฉันมีฟังก์ชันที่ใช้Pattern#compileและMatcherค้นหารายการสตริงสำหรับรูปแบบ ฟังก์ชันนี้ใช้ในหลายเธรด แต่ละเธรดจะมีรูปแบบเฉพาะที่ส่งผ่านไปยังPattern#compileเวลาที่สร้างเธรด จำนวนเธรดและรูปแบบเป็นแบบไดนามิกซึ่งหมายความว่าฉันสามารถเพิ่มPatterns และเธรดได้มากขึ้นในระหว่างการกำหนดค่า ฉันต้องใส่synchronizeฟังก์ชันนี้หรือไม่หากใช้ regex regex ใน java thread ปลอดภัยหรือไม่?

4
Java Synchronized Block สำหรับ. class
รหัสจาวาหมายถึงอะไร? จะได้รับการล็อควัตถุทั้งหมดของMyClass? synchronized(MyClass.class) { //is all objects of MyClass are thread-safe now ?? } และโค้ดด้านบนแตกต่างจากโค้ดนี้อย่างไร: synchronized(this) { //is all objects of MyClass are thread-safe now ?? }

3
STAThread และมัลติเธรด
จากบทความ MSDN ใน STAThread: ระบุว่าแบบจำลองเธรด COM สำหรับแอ็พพลิเคชันเป็น single-threaded apartment (STA) (สำหรับการอ้างอิงนั่นคือบทความทั้งหมด ) อพาร์ทเมนต์แบบเธรดเดี่ยว ... ตกลงที่อยู่เหนือหัวของฉัน นอกจากนี้ฉันอ่านที่ไหนสักแห่งเว้นแต่แอปพลิเคชันของคุณจะใช้ COM interop แอตทริบิวต์นี้ไม่ได้ทำอะไรเลย มันทำอะไรกันแน่และมีผลต่อแอพพลิเคชั่นมัลติเธรดอย่างไร? แอพพลิเคชั่นแบบมัลติเธรด (ซึ่งรวมถึงอะไรก็ตามจากใครก็ตามที่ใช้Timers ไปจนถึงการเรียกเมธอดอะซิงโครนัสไม่ใช่แค่เธรดพูลและสิ่งที่คล้ายกัน) ใช้ MTAThread แม้ว่ามันจะ 'เพียงเพื่อความปลอดภัย' ก็ตาม STAThread และ MTAThread ทำอะไรได้จริง?
102 c#  .net  multithreading  sta 

4
การสร้างเธรด - Task.Factory.StartNew vs new Thread ()
ฉันเพิ่งเรียนรู้เกี่ยวกับ Threading และ Parallel libraries ใหม่ใน. Net 4 ในอดีตฉันจะสร้าง Thread ใหม่ในลักษณะนี้ (ดังตัวอย่าง): DataInThread = new Thread(new ThreadStart(ThreadProcedure)); DataInThread.IsBackground = true; DataInThread.Start(); ตอนนี้ฉันทำได้: Task t = Task.Factory.StartNew(() => { ThreadProcedure(); }); อะไรคือความแตกต่างถ้ามี? ขอบคุณ

6
ความแตกต่างระหว่างสถานะของเธรด WAIT และ BLOCKED
ความแตกต่างระหว่างสถานะเธรด WAIT และสถานะเธรดถูกบล็อกคืออะไร? เอกสาร Thread.State : ถูกบล็อก เธรดที่ถูกบล็อกเพื่อรอการล็อกจอภาพอยู่ในสถานะนี้ กำลังรอ เธรดที่กำลังรอเธรดอื่นอย่างไม่มีกำหนดเพื่อดำเนินการเฉพาะอยู่ในสถานะนี้ ไม่ได้อธิบายความแตกต่างให้ฉัน

9
จะทำให้ ThreadPoolExecutor เพิ่มเธรดให้สูงสุดก่อนเข้าคิวได้อย่างไร
ฉันรู้สึกท้อแท้มาระยะหนึ่งแล้วกับพฤติกรรมเริ่มต้นThreadPoolExecutorซึ่งอยู่เบื้องหลังExecutorServiceเธรดพูลที่พวกเราหลายคนใช้ หากต้องการอ้างอิงจาก Javadocs: หากมีมากกว่า corePoolSize แต่น้อยกว่าหัวข้อ maximumPoolSize ทำงานหัวข้อใหม่จะถูกสร้างขึ้นเฉพาะในกรณีที่คิวเต็ม สิ่งนี้หมายความว่าถ้าคุณกำหนดเธรดพูลด้วยรหัสต่อไปนี้เธรดจะไม่เริ่มเธรดที่ 2 เนื่องจากLinkedBlockingQueueไม่ถูกผูกไว้ ExecutorService threadPool = new ThreadPoolExecutor(1 /*core*/, 50 /*max*/, 60 /*timeout*/, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(/* unlimited queue */)); เฉพาะในกรณีที่คุณมีคิวที่ถูกล้อมรอบและคิวเต็มเท่านั้นที่จะมีเธรดที่อยู่เหนือหมายเลขหลักเริ่มต้น ฉันสงสัยว่าโปรแกรมเมอร์มัลติเธรด Java รุ่นจูเนียร์จำนวนมากไม่ทราบถึงพฤติกรรมนี้ของไฟล์ThreadPoolExecutor. ตอนนี้ฉันมีกรณีการใช้งานที่เฉพาะเจาะจงซึ่งไม่เหมาะสม ฉันกำลังมองหาวิธีต่างๆโดยไม่ต้องเขียนคลาส TPE ของตัวเองเพื่อแก้ไข ข้อกำหนดของฉันมีไว้สำหรับบริการเว็บที่โทรกลับไปยังบุคคลที่สามที่อาจไม่น่าเชื่อถือ ฉันไม่ต้องการโทรกลับพร้อมกันกับคำขอทางเว็บดังนั้นฉันต้องการใช้เธรดพูล ฉันมักจะได้เวลาสองสามนาทีนี้ดังนั้นฉันจึงไม่อยากมีnewFixedThreadPool(...)เธรดจำนวนมากที่ส่วนใหญ่อยู่เฉยๆ บ่อยครั้งที่ฉันได้รับปริมาณการใช้งานจำนวนมากและฉันต้องการเพิ่มจำนวนเธรดให้เป็นค่าสูงสุด (สมมติว่า 50) ฉันต้องพยายามอย่างเต็มที่เพื่อทำการโทรกลับทั้งหมดดังนั้นฉันจึงต้องการจัดคิวรายการเพิ่มเติมที่สูงกว่า 50 ฉันไม่ต้องการทำให้เว็บเซิร์ฟเวอร์ส่วนที่เหลือของฉันล้นโดยใช้ไฟล์newCachedThreadPool(). ฉันจะแก้ไขข้อ จำกัด นี้ได้อย่างไรในThreadPoolExecutorกรณีที่คิวต้องถูกล้อมรอบและเต็มก่อนที่จะเริ่มเธรดเพิ่มเติม ฉันจะเริ่มเธรดเพิ่มเติมก่อนเข้าคิวงานได้อย่างไร แก้ไข: @Flavio …

7
เหตุใดตัวแปร Java ThreadLocal จึงควรเป็นแบบคงที่
ฉันกำลังอ่าน JavaDoc สำหรับ Threadlocal ที่นี่ https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ThreadLocal.html และมีข้อความระบุว่า "อินสแตนซ์ ThreadLocal มักเป็นฟิลด์สแตติกส่วนตัวในคลาสที่ต้องการเชื่อมโยงสถานะกับเธรด (เช่น ID ผู้ใช้หรือรหัสธุรกรรม)" แต่คำถามของฉันคือทำไมพวกเขาถึงเลือกที่จะทำให้เป็นแบบคงที่ (โดยทั่วไป) - มันทำให้เกิดความสับสนเล็กน้อยที่จะมีสถานะ "ต่อเธรด" แต่ฟิลด์เป็นแบบคงที่?

5
“ ที่จัดเก็บเธรดในเครื่อง” ใน Python คืออะไรและเหตุใดฉันจึงต้องใช้
ใน Python โดยเฉพาะตัวแปรจะแชร์ระหว่างเธรดได้อย่างไร แม้ว่าฉันจะเคยใช้มาthreading.Threadก่อน แต่ฉันไม่เคยเข้าใจหรือเห็นตัวอย่างของการแบ่งปันตัวแปรเลย มีการแบ่งปันระหว่างกระทู้หลักกับเด็ก ๆ หรือเฉพาะในกลุ่มเด็ก ๆ เท่านั้น? ฉันจะต้องใช้ที่จัดเก็บเธรดในเครื่องเมื่อใดเพื่อหลีกเลี่ยงการแชร์นี้ ฉันเห็นคำเตือนมากมายเกี่ยวกับการซิงโครไนซ์การเข้าถึงข้อมูลที่แชร์ระหว่างเธรดโดยใช้การล็อก แต่ฉันยังไม่เห็นตัวอย่างที่ดีของปัญหา ขอบคุณล่วงหน้า!

5
รอจนกว่างานจะเสร็จสิ้น
ฉันจะทำให้รหัสของฉันรอจนกว่างานใน DispatchQueue จะเสร็จสิ้นได้อย่างไร มันต้องการ CompletionHandler หรืออะไร? func myFunction() { var a: Int? DispatchQueue.main.async { var b: Int = 3 a = b } // wait until the task finishes, then print print(a) // - this will contain nil, of course, because it // will execute before the code above } …

3
หากเธรดใช้ PID เดียวกันจะระบุได้อย่างไร
ฉันมีคำถามเกี่ยวกับการใช้เธรดใน Linux Linux ไม่มีการสนับสนุนเธรดที่ชัดเจน ใน userspace เราอาจใช้เธรดไลบรารี (เช่น NPTL) สำหรับการสร้างเธรด ตอนนี้ถ้าเราใช้ NPTL จะรองรับการทำแผนที่ 1: 1 เคอร์เนลจะใช้clone()ฟังก์ชันเพื่อใช้เธรด สมมติว่าฉันสร้าง 4 เธรด จากนั้นก็หมายความว่า: จะมี 4 task_struct. ภายในจะมีการจัดหาทรัพยากรที่ใช้ร่วมกันตามข้อโต้แย้งในการโคลนtask_struct(CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND) ตอนนี้ฉันมีคำถามต่อไปนี้: 4 เธรดจะมี PID เดียวกันหรือไม่? หากมีใครสามารถอธิบายได้อย่างละเอียดจะมีการแบ่งปัน PID อย่างไร มีการระบุเธรดต่างๆอย่างไร มีแนวคิด TID (thread ID) บ้างไหม

2
วิธีวิเคราะห์การถ่ายโอนข้อมูลเธรด java
ฉันพยายามทำความเข้าใจเพิ่มเติมเกี่ยวกับ java โดยเฉพาะเกี่ยวกับการจัดการหน่วยความจำและเธรด ด้วยเหตุนี้ฉันเพิ่งพบความสนใจในการดูที่ทิ้งเธรด นี่คือไม่กี่บรรทัดที่นำมาจากเว็บแอปโดยใช้ VisualVM ซึ่งเป็นเครื่องมือในตัวสำหรับ java: "Finalizer" daemon prio=8 tid=0x02b3d000 nid=0x898 in Object.wait() [0x02d0f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x27ef0288> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) - locked <0x27ef0288> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) Locked ownable synchronizers: - None "Reference Handler" daemon prio=10 …

3
ไม่สามารถใช้ SynchronizationContext ปัจจุบันเป็น TaskScheduler
ผมใช้งานเพื่อให้ทำงานได้นานทำงานโทรเซิร์ฟเวอร์ใน ViewModel ของฉันและผลลัพธ์จะเรียงกลับในการใช้Dispatcher TaskScheduler.FromSyncronizationContext()ตัวอย่างเช่น: var context = TaskScheduler.FromCurrentSynchronizationContext(); this.Message = "Loading..."; Task task = Task.Factory.StartNew(() => { ... }) .ContinueWith(x => this.Message = "Completed" , context); สิ่งนี้ใช้ได้ดีเมื่อฉันเรียกใช้แอปพลิเคชัน แต่เมื่อฉันทำการNUnitทดสอบResharperฉันได้รับข้อความแสดงข้อผิดพลาดในการโทรFromCurrentSynchronizationContextเป็น: ไม่สามารถใช้ SynchronizationContext ปัจจุบันเป็น TaskScheduler ฉันเดาว่านี่เป็นเพราะการทดสอบทำงานบนเธรดของผู้ปฏิบัติงาน ฉันจะแน่ใจได้อย่างไรว่าการทดสอบรันบนเธรดหลัก ข้อเสนอแนะอื่น ๆ ยินดีต้อนรับ

5
ตัวจับเวลา C # ผ่านไปในเธรดแยกหรือไม่?
System.Timers.Timer ผ่านเธรดที่แยกจากเธรดที่สร้างขึ้นหรือไม่ สมมติว่าฉันมีคลาสที่มีตัวจับเวลาที่ยิงทุกๆ 5 วินาที เมื่อตัวจับเวลาเริ่มทำงานในวิธีการที่ผ่านไปวัตถุบางอย่างจะถูกแก้ไข สมมติว่าใช้เวลาแก้ไขวัตถุนี้นานเช่น 10 วินาที เป็นไปได้ไหมที่ฉันจะประสบปัญหาการชนกันของเธรดในสถานการณ์นี้
100 c#  multithreading  timer 

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