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

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

2
ความแตกต่างระหว่างอนาคตที่สมบูรณ์ในอนาคตและ RxJava ที่สังเกตได้
ผมอยากจะทราบความแตกต่างระหว่าง CompletableFuture, และFutureObservable RxJava สิ่งที่ฉันรู้คือทั้งหมดนั้นไม่ตรงกัน แต่ Future.get() บล็อกเธรด CompletableFuture ให้วิธีการโทรกลับ RxJava Observable--- คล้ายCompletableFutureกับผลประโยชน์อื่น ๆ (ไม่แน่ใจ) ตัวอย่างเช่น: หากลูกค้าต้องการใช้บริการหลายสายและเมื่อเราใช้Futures(Java) Future.get()จะถูกดำเนินการตามลำดับ ... ต้องการทราบว่า RxJava ดีกว่าได้อย่างไร และเอกสารประกอบhttp://reactivex.io/intro.htmlกล่าว เป็นการยากที่จะใช้ฟิวเจอร์สในการเขียนขั้นตอนการดำเนินการแบบอะซิงโครนัสตามเงื่อนไขอย่างเหมาะสมที่สุด (หรือเป็นไปไม่ได้เนื่องจากเวลาแฝงของแต่ละคำขอแตกต่างกันที่รันไทม์) สามารถทำสิ่งนี้ได้ แต่มันจะซับซ้อนอย่างรวดเร็ว (และทำให้เกิดข้อผิดพลาดได้ง่าย) หรือบล็อกอยู่บน Future.get () ก่อนกำหนดซึ่งจะกำจัดข้อดีของการประมวลผลแบบอะซิงโครนัส สนใจจริงๆที่จะรู้วิธีRxJavaแก้ปัญหานี้ ฉันพบว่ามันยากที่จะเข้าใจจากเอกสาร

30
ปัญหาการเห็นพ้องบ่อยที่สุดที่คุณพบใน Java คืออะไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา นี่เป็นแบบสำรวจความคิดเห็นเกี่ยวกับปัญหาการเกิดพร้อมกันทั่วไปใน Java ตัวอย่างอาจเป็น deadlock แบบคลาสสิกหรือสภาพการแข่งขันหรือบางที EDT เธรดเธรดใน Swing ฉันสนใจทั้งปัญหาที่เป็นไปได้กว้าง แต่รวมถึงประเด็นที่พบบ่อยที่สุดด้วย ดังนั้นโปรดทิ้งคำตอบเฉพาะไว้สำหรับข้อบกพร่องของการทำงานพร้อมกันของ Java ต่อความคิดเห็นและโหวตถ้าคุณเห็นคำตอบที่คุณพบ

11
Java วิธีการทำข้อมูลให้ตรงกันล็อคกับวัตถุหรือวิธี?
ถ้าฉันมีวิธีการซิงโครไนส์ 2 วิธีในคลาสเดียวกัน แต่แต่ละวิธีเข้าถึงตัวแปรที่แตกต่างกัน 2 เธรดสามารถเข้าถึง 2 วิธีเหล่านั้นในเวลาเดียวกันได้หรือไม่ ล็อคเกิดขึ้นกับวัตถุหรือมีความเฉพาะเจาะจงกับตัวแปรภายในวิธีการซิงโครไนซ์หรือไม่? ตัวอย่าง: class X { private int a; private int b; public synchronized void addA(){ a++; } public synchronized void addB(){ b++; } } 2 เธรดสามารถเข้าถึงอินสแตนซ์เดียวกันของคลาส X ที่มีประสิทธิภาพx.addA() และx.addB()ในเวลาเดียวกันได้หรือไม่

7
ความแตกต่างระหว่าง Task.Run () และ Task.Factory.StartNew () คืออะไร
ฉันมีวิธีการ: private static void Method() { Console.WriteLine("Method() started"); for (var i = 0; i < 20; i++) { Console.WriteLine("Method() Counter = " + i); Thread.Sleep(500); } Console.WriteLine("Method() finished"); } และฉันต้องการเริ่มวิธีนี้ในงานใหม่ ฉันสามารถเริ่มงานใหม่เช่นนี้ var task = Task.Factory.StartNew(new Action(Method)); หรือสิ่งนี้ var task = Task.Run(new Action(Method)); แต่จะมีความแตกต่างใด ๆ ระหว่างและTask.Run() Task.Factory.StartNew()ทั้งคู่กำลังใช้ ThreadPool และเริ่มวิธีการ () ทันทีหลังจากสร้างอินสแตนซ์ของงาน …

9
ความแตกต่างระหว่างเธรดและไฟเบอร์คืออะไร?
ความแตกต่างระหว่างเธรดและไฟเบอร์คืออะไร? ฉันเคยได้ยินเรื่องเส้นใยจากทับทิมและฉันอ่านแล้วได้ยินว่ามันมีอยู่ในภาษาอื่นบางคนสามารถอธิบายให้ฉันได้ง่ายๆว่าอะไรคือความแตกต่างระหว่างเธรดและไฟเบอร์

12
CountDownLatch ใช้ใน Java Multithreading อย่างไร
มีใครช่วยให้ฉันเข้าใจว่า Java CountDownLatchคืออะไรและใช้เมื่อใด? ฉันไม่มีความคิดที่ชัดเจนว่าโปรแกรมนี้ทำงานอย่างไร ฉันเข้าใจว่าทั้งสามเธรดเริ่มต้นพร้อมกันและแต่ละเธรดจะเรียก CountDownLatch หลังจาก 3000 มิลลิวินาที ดังนั้นการนับถอยหลังจะลดลงทีละคน หลังจากสลักกลายเป็นศูนย์โปรแกรมจะพิมพ์ "เสร็จสมบูรณ์" บางทีวิธีที่ฉันเข้าใจไม่ถูกต้อง import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; class Processor implements Runnable { private CountDownLatch latch; public Processor(CountDownLatch latch) { this.latch = latch; } public void run() { System.out.println("Started."); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } …

7
Recursive Lock (Mutex) กับ Non-Recursive Lock (Mutex)
POSIX อนุญาตให้ mutexes วนซ้ำ นั่นหมายความว่าเธรดเดียวกันสามารถล็อค mutex เดียวกันสองครั้งและจะไม่หยุดชะงัก แน่นอนว่ามันต้องปลดล็อคสองครั้งมิฉะนั้นจะไม่มีเธรดอื่นที่สามารถรับ mutex ได้ ไม่ได้ทุกระบบสนับสนุน pthreads ยังสนับสนุน mutexes recursive แต่ถ้าพวกเขาต้องการที่จะPOSIX สอดคล้องพวกเขาจะต้อง API อื่น ๆ (API ระดับสูงกว่า) มักจะเสนอ mutexes ซึ่งมักเรียกว่าล็อค ระบบ / ภาษาบางระบบ (เช่น Cocoa Objective-C) เสนอทั้ง mutex แบบเรียกซ้ำและไม่เรียกซ้ำ บางภาษาเสนอเพียงหนึ่งภาษาเท่านั้น เช่นใน Java mutexes จะเรียกซ้ำ (เธรดเดียวกันอาจสองครั้ง "ซิงโครไนซ์" บนวัตถุเดียวกัน) ขึ้นอยู่กับฟังก์ชันเธรดอื่น ๆ ที่พวกเขาเสนอการไม่มี mutexes แบบเรียกซ้ำอาจไม่มีปัญหาเนื่องจากพวกเขาสามารถเขียนได้อย่างง่ายดายด้วยตัวคุณเอง สิ่งที่ฉันไม่เข้าใจจริง ๆ : …

10
การประสานเทียบกับล็อค
java.util.concurrentAPI จัดให้มีคลาสที่เรียกว่าLockซึ่งโดยทั่วไปจะเรียงลำดับการควบคุมเพื่อเข้าถึงทรัพยากรที่สำคัญ มันทำให้วิธีการดังกล่าวเป็นและ park()unpark() เราสามารถทำสิ่งที่คล้ายกันถ้าเราสามารถใช้synchronizedคำหลักและการใช้wait()และnotify() notifyAll()วิธีการ ฉันสงสัยว่าหนึ่งในสิ่งเหล่านี้ดีกว่าในการปฏิบัติและทำไม?

5
ฉันจะแปลงรหัส foreach นี้เป็น Parallel.ForEach ได้อย่างไร
ฉันสับสนParallel.ForEachเล็กน้อย มันคืออะไรParallel.ForEachและมันทำอะไรกันแน่? โปรดอย่าอ้างอิงลิงก์ MSDN ใด ๆ นี่คือตัวอย่างง่ายๆ: string[] lines = File.ReadAllLines(txtProxyListPath.Text); List<string> list_lines = new List<string>(lines); foreach (string line in list_lines) { //My Stuff } ฉันจะเขียนตัวอย่างนี้อีกครั้งได้Parallel.ForEachอย่างไร

6
เหตุใดการสร้างเธรดจึงมีราคาแพง
บทเรียน Java กล่าวว่าการสร้างกระทู้มีราคาแพง แต่ทำไมมันแพง จะเกิดอะไรขึ้นเมื่อสร้าง Java Thread ขึ้นมาซึ่งทำให้การสร้างนั้นแพง ฉันรับปากว่าเป็นความจริง แต่ฉันแค่สนใจกลไกการสร้างเธรดใน JVM เธรดค่าใช้จ่ายตลอดวงจร การสร้างเธรดและการฉีกขาดไม่ฟรี ค่าใช้จ่ายจริงจะแตกต่างกันไปตามแต่ละแพลตฟอร์ม แต่การสร้างเธรดต้องใช้เวลาแนะนำเวลาแฝงในการประมวลผลคำขอและต้องการกิจกรรมการประมวลผลบางอย่างโดย JVM และ OS หากคำขอมีบ่อยและมีน้ำหนักเบาเช่นเดียวกับในแอพพลิเคชันเซิร์ฟเวอร์ส่วนใหญ่การสร้างเธรดใหม่สำหรับแต่ละคำร้องขอสามารถใช้ทรัพยากรการประมวลผลที่สำคัญ จากJava Concurrency ในทางปฏิบัติ โดย Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, David Holmes, Doug Lea พิมพ์ ISBN-10: 0-321-34960-1

9
การทำให้รูปแบบรหัส InvokeRequired เป็นแบบอัตโนมัติ
ฉันได้รับรู้ถึงความเจ็บปวดอย่างถี่ถ้วนว่าบ่อยครั้งที่เราต้องเขียนรูปแบบโค้ดต่อไปนี้ในโค้ด GUI ที่ควบคุมโดยเหตุการณ์ private void DoGUISwitch() { // cruisin for a bruisin' through exception city object1.Visible = true; object2.Visible = false; } กลายเป็น: private void DoGUISwitch() { if (object1.InvokeRequired) { object1.Invoke(new MethodInvoker(() => { DoGUISwitch(); })); } else { object1.Visible = true; object2.Visible = false; } } นี่เป็นรูปแบบที่น่าอึดอัดใจใน C # …

8
วิธีสแตติกแบบซิงโครนัสทำงานได้อย่างไรใน Java และฉันสามารถใช้สำหรับการโหลดรายการไฮเบอร์เนตได้อย่างไร
ถ้าฉันมีคลาส util ด้วยวิธีการคงที่ที่จะเรียกใช้ฟังก์ชันไฮเบอร์เนตเพื่อให้เข้าถึงข้อมูลขั้นพื้นฐาน ฉันสงสัยว่าการทำวิธีsynchronizedนี้เป็นวิธีการที่ถูกต้องหรือไม่ ฉันต้องการสิ่งนี้เพื่อป้องกันการเข้าถึงข้อมูลไปยังอินสแตนซ์ฐานข้อมูลเดียวกัน อย่างไรก็ตามตอนนี้ฉันแน่ใจว่ารหัสต่อไปนี้จะป้องกันไม่ให้getObjectByIdถูกเรียกสำหรับคลาสทั้งหมดเมื่อถูกเรียกโดยคลาสที่เฉพาะเจาะจง public class Utils { public static synchronized Object getObjectById (Class objclass, Long id) { // call hibernate class Session session = new Configuration().configure().buildSessionFactory().openSession(); Object obj = session.load(objclass, id); session.close(); return obj; } // other static methods }

8
วิธีค้นหา thread id ใน Python
ฉันมีโปรแกรม Python แบบมัลติเธรดและฟังก์ชันยูทิลิตี้writeLog(message)ที่เขียนการประทับเวลาตามด้วยข้อความ น่าเสียดายที่ไฟล์บันทึกผลลัพธ์แสดงว่าไม่มีการระบุว่าเธรดใดกำลังสร้างข้อความใด ฉันต้องการwriteLog()เพิ่มบางสิ่งบางอย่างในข้อความเพื่อระบุว่าเธรดใดกำลังเรียกใช้ เห็นได้ชัดว่าฉันสามารถทำให้กระทู้ผ่านข้อมูลนี้ แต่นั่นจะทำงานได้มากขึ้น มีเธรดเทียบเท่ากับos.getpid()ที่ฉันสามารถใช้ได้หรือไม่

10
วิธีรอเธรดให้เสร็จสิ้นด้วย. NET
ฉันไม่เคยใช้เธรดมาก่อนใน C # โดยที่ฉันต้องมีสองเธรดรวมถึงเธรด UI หลัก โดยทั่วไปฉันมีดังต่อไปนี้ public void StartTheActions() { //Starting thread 1.... Thread t1 = new Thread(new ThreadStart(action1)); t1.Start(); // Now, I want for the main thread (which is calling `StartTheActions` method) // to wait for `t1` to finish. I've created an event in `action1` for this. // …
178 c#  multithreading 

5
เหตุใดจึงไม่มี GIL ใน Java Virtual Machine ทำไมไพ ธ อนถึงต้องการตัวแย่?
ฉันหวังว่าบางคนสามารถให้ข้อมูลเชิงลึกเกี่ยวกับสิ่งที่แตกต่างกันโดยพื้นฐานเกี่ยวกับ Java Virtual Machine ที่อนุญาตให้ใช้เธรดได้อย่างดีโดยไม่จำเป็นต้องใช้ Global Interpreter Lock (GIL) ในขณะที่ Python จำเป็นต้องมีความชั่วร้าย
177 java  python  multithreading  jvm  gil 

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