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

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

4
ความแตกต่างระหว่างสารระเหยและซิงโครไนซ์ใน Java
ฉันสงสัยว่าความแตกต่างระหว่างการประกาศตัวแปรเป็นvolatileและการเข้าถึงตัวแปรในsynchronized(this)บล็อกใน Java หรือไม่? ตามบทความนี้http://www.javamex.com/tutorials/synchronization_volatile.shtmlมีหลายสิ่งที่ต้องพูดและมีความแตกต่างมากมาย แต่ก็มีความคล้ายคลึงกันบ้าง ฉันสนใจข้อมูลนี้เป็นพิเศษ: ... การเข้าถึงตัวแปรที่เปลี่ยนแปลงได้ไม่เคยมีศักยภาพในการบล็อก: เราเพียง แต่ทำการอ่านหรือเขียนอย่างง่าย ๆ เท่านั้นซึ่งแตกต่างจากบล็อกที่ซิงโครไนซ์ที่เราจะไม่ยึดติดกับล็อคใด ๆ เนื่องจากการเข้าถึงตัวแปรระเหยไม่เคยมีการล็อคจึงไม่เหมาะสำหรับกรณีที่เราต้องการอ่าน - อัปเดต - เขียนเป็นปฏิบัติการอะตอมมิก (เว้นแต่ว่าเราพร้อมที่จะ "พลาดการอัพเดท"); พวกเขาหมายถึงอะไรโดยread-update-write ? การเขียนนั้นเป็นการอัปเดตหรือหมายความว่าการอัปเดตนั้นเป็นการเขียนที่ขึ้นอยู่กับการอ่านด้วยหรือไม่ ส่วนใหญ่แล้วเมื่อใดที่เหมาะสมที่จะประกาศตัวแปรvolatileมากกว่าเข้าถึงตัวแปรเหล่านั้นผ่านsynchronizedบล็อก? เป็นความคิดที่ดีที่จะใช้volatileกับตัวแปรที่ขึ้นอยู่กับอินพุตหรือไม่? ตัวอย่างเช่นมีตัวแปรที่เรียกrenderว่าอ่านห่วงการเรนเดอร์และตั้งค่าโดยเหตุการณ์ keypress หรือไม่

13
รับรายการเธรดทั้งหมดที่กำลังทำงานใน Java
มีวิธีใดบ้างที่ฉันสามารถรับรายการเธรดที่กำลังรันทั้งหมดใน JVM ปัจจุบัน (รวมถึงเธรดที่ไม่ได้เริ่มโดยคลาสของฉัน)? มันเป็นไปได้ที่จะได้รับThreadและClassวัตถุของกระทู้ทั้งหมดในรายการหรือไม่ ฉันต้องการที่จะสามารถทำสิ่งนี้ผ่านรหัส
232 java  multithreading  jvm 

15
อะไรคือความแตกต่างระหว่าง Thread start () และ Runnable run ()
สมมติว่าเรามี Runnables สองรายการนี้: class R1 implements Runnable { public void run() { … } … } class R2 implements Runnable { public void run() { … } … } แล้วความแตกต่างระหว่างสิ่งนี้คืออะไร: public static void main() { R1 r1 = new R1(); R2 r2 = new R2(); r1.run(); r2.run(); } และนี่: public …

12
ไม่สามารถเลือก <type 'instancemethod'> เมื่อใช้มัลติโพรเซสซิง Pool.map ()
ฉันพยายามที่จะใช้งานmultiprocessingของPool.map()ฟังก์ชั่นที่จะแบ่งออกงานพร้อมกัน เมื่อฉันใช้รหัสต่อไปนี้มันทำงานได้ดี: import multiprocessing def f(x): return x*x def go(): pool = multiprocessing.Pool(processes=4) print pool.map(f, range(10)) if __name__== '__main__' : go() อย่างไรก็ตามเมื่อฉันใช้มันในแนวทางเชิงวัตถุมากกว่ามันไม่ทำงาน ข้อความแสดงข้อผิดพลาด: PicklingError: Can't pickle &lt;type 'instancemethod'&gt;: attribute lookup __builtin__.instancemethod failed สิ่งนี้เกิดขึ้นเมื่อโปรแกรมหลักของฉันคือ: import someClass if __name__== '__main__' : sc = someClass.someClass() sc.go() และต่อไปนี้เป็นsomeClassชั้นเรียนของฉัน: import multiprocessing class someClass(object): def __init__(self): …

7
Haskell ตอบสนองต่อ Node.js คืออะไร?
ฉันเชื่อว่าชุมชน Erlang ไม่ได้มีความริษยาของ Node.js เนื่องจากเป็นแบบไม่บล็อก I / O และมีวิธีการปรับใช้งานได้อย่างง่ายดายไปยังตัวประมวลผลมากกว่าหนึ่งตัว รายละเอียดเพิ่มเติมได้ที่http://journal.dedasys.com/2010/04/29/erlang-vs-node-jsและNode.js หรือ Erlang แล้ว Haskell ล่ะ Haskell สามารถให้ประโยชน์บางอย่างของ Node.js ได้หรือไม่นั่นคือโซลูชันที่สะอาดเพื่อหลีกเลี่ยงการบล็อก I / O โดยไม่ต้องขอความช่วยเหลือจากการเขียนโปรแกรมแบบหลายเธรด? มีหลายสิ่งที่น่าสนใจสำหรับ Node.js เหตุการณ์: ไม่มีการจัดการเธรดโปรแกรมเมอร์ให้การเรียกกลับเท่านั้น (ในกรอบงาน Snap) รับประกันการโทรกลับเพื่อให้ทำงานในหัวข้อเดียว: ไม่มีสภาพการแข่งขัน API ที่ใช้งานง่ายและเป็นมิตรกับ UNIX โบนัส: รองรับ HTTP ที่ยอดเยี่ยม นอกจากนี้ยังมี DNS I / O ทุกตัวเป็นค่าเริ่มต้นแบบอะซิงโครนัส ทำให้ง่ายขึ้นในการหลีกเลี่ยงการล็อค อย่างไรก็ตามการประมวลผล CPU มากเกินไปในการติดต่อกลับจะส่งผลต่อการเชื่อมต่ออื่น ๆ (ในกรณีนี้งานควรแบ่งออกเป็นงานย่อยที่มีขนาดเล็กลงและกำหนดเวลาใหม่) …

5
ความต่อเนื่องของงานบนเธรด UI
มีวิธี 'มาตรฐาน' เพื่อระบุว่างานต่อเนื่องควรทำงานบนเธรดที่งานเริ่มต้นถูกสร้างขึ้น? ขณะนี้ฉันมีรหัสด้านล่าง - มันใช้งานได้ แต่คอยติดตามดิสแพตเชอร์และการสร้างแอคชั่นที่สองดูเหมือนจะเป็นค่าใช้จ่ายที่ไม่จำเป็น dispatcher = Dispatcher.CurrentDispatcher; Task task = Task.Factory.StartNew(() =&gt; { DoLongRunningWork(); }); Task UITask= task.ContinueWith(() =&gt; { dispatcher.Invoke(new Action(() =&gt; { this.TextBlock1.Text = "Complete"; } });
214 c#  .net  wpf  multithreading  task 

12
การจัดการข้อยกเว้นจากงาน Java ExecutorService
ฉันกำลังพยายามใช้ThreadPoolExecutorคลาสของ Java เพื่อทำงานหนักจำนวนมากด้วยจำนวนเธรดที่แน่นอน แต่ละงานมีหลายสถานที่ซึ่งอาจล้มเหลวเนื่องจากข้อยกเว้น ฉันได้ subclassed ThreadPoolExecutorและฉันได้แทนที่afterExecuteวิธีที่ควรจะให้ข้อยกเว้นที่ไม่ถูกตรวจพบในขณะที่ทำงาน อย่างไรก็ตามฉันไม่สามารถใช้งานได้ ตัวอย่างเช่น: public class ThreadPoolErrors extends ThreadPoolExecutor { public ThreadPoolErrors() { super( 1, // core threads 1, // max threads 1, // timeout TimeUnit.MINUTES, // timeout units new LinkedBlockingQueue&lt;Runnable&gt;() // work queue ); } protected void afterExecute(Runnable r, Throwable t) { super.afterExecute(r, t); …



7
การปลุกกลอุบายใน Java เกิดขึ้นจริงหรือไม่?
เห็นคำถามที่เกี่ยวข้องกับการล็อคต่าง ๆ และ (เกือบ) มักจะหาคำว่า 'ห่วงเพราะของการปลุกซ้ำ' 1ฉันสงสัยว่ามีใครเคยมีประสบการณ์การปลุกดังกล่าวบ้าง (สมมติว่าเป็นตัวอย่างของฮาร์ดแวร์ / ซอฟต์แวร์ที่เหมาะสม) ฉันรู้ว่าคำว่า 'ปลอม' หมายถึงไม่มีเหตุผลที่ชัดเจน แต่อะไรคือสาเหตุของเหตุการณ์ดังกล่าว ( 1หมายเหตุ: ผมไม่ได้ตั้งคำถามการปฏิบัติวนลูป.) แก้ไข:คำถามที่ผู้ช่วย (สำหรับผู้ที่ชอบตัวอย่างโค้ด): หากฉันมีโปรแกรมต่อไปนี้และฉันเรียกใช้: public class Spurious { public static void main(String[] args) { Lock lock = new ReentrantLock(); Condition cond = lock.newCondition(); lock.lock(); try { try { cond.await(); System.out.println("Spurious wakeup!"); } catch (InterruptedException …

15
ตรวจสอบข้อยกเว้นของเธรดในตัวเรียกเธรดใน Python
ฉันใหม่กับ Python และการเขียนโปรแกรมแบบมัลติเธรดโดยทั่วไป โดยทั่วไปฉันมีสคริปต์ที่จะคัดลอกไฟล์ไปยังตำแหน่งอื่น ฉันต้องการให้วางในเธรดอื่นเพื่อให้สามารถแสดงผล....เพื่อระบุว่าสคริปต์ยังคงทำงานอยู่ ปัญหาที่ฉันมีอยู่คือหากไฟล์ไม่สามารถคัดลอกได้มันจะทำให้เกิดข้อยกเว้น ไม่เป็นไรหากทำงานในเธรดหลัก อย่างไรก็ตามการมีรหัสต่อไปนี้ใช้ไม่ได้: try: threadClass = TheThread(param1, param2, etc.) threadClass.start() ##### **Exception takes place here** except: print "Caught an exception" ในคลาสเธรดตัวเองฉันพยายามโยนข้อยกเว้นอีกครั้ง แต่ไม่ทำงาน ฉันเคยเห็นผู้คนที่นี่ถามคำถามที่คล้ายกัน แต่พวกเขาทั้งหมดดูเหมือนจะทำสิ่งที่เฉพาะเจาะจงมากกว่าสิ่งที่ฉันพยายามทำ (และฉันไม่ค่อยเข้าใจวิธีแก้ไขที่เสนอ) ฉันเคยเห็นคนพูดถึงการใช้งานของsys.exc_info()แต่ฉันไม่ทราบว่าจะใช้หรือไม่ ความช่วยเหลือทั้งหมดได้รับการชื่นชมอย่างมาก! แก้ไข:รหัสสำหรับชั้นด้ายอยู่ด้านล่าง: class TheThread(threading.Thread): def __init__(self, sourceFolder, destFolder): threading.Thread.__init__(self) self.sourceFolder = sourceFolder self.destFolder = destFolder def run(self): try: shul.copytree(self.sourceFolder, …

14
ExecutorService วิธีรองานทั้งหมดให้เสร็จ
วิธีที่ง่ายที่สุดในการรอให้ภารกิจทั้งหมดExecutorServiceเสร็จสิ้นคืออะไร งานของฉันคือการคำนวณเป็นหลักดังนั้นฉันแค่ต้องการเรียกใช้งานจำนวนมาก - หนึ่งในแต่ละหลัก ตอนนี้การตั้งค่าของฉันมีลักษณะดังนี้: ExecutorService es = Executors.newFixedThreadPool(2); for (DataTable singleTable : uniquePhrases) { es.execute(new ComputeDTask(singleTable)); } try{ es.wait(); } catch (InterruptedException e){ e.printStackTrace(); } ComputeDTaskใช้ runnable เรื่องนี้ดูเหมือนจะดำเนินงานได้อย่างถูกต้อง แต่รหัสเกิดปัญหาในด้วยwait() IllegalMonitorStateExceptionนี่เป็นเรื่องแปลกเพราะฉันเล่นไปด้วยตัวอย่างของเล่นและดูเหมือนว่ามันจะใช้ได้ uniquePhrasesมีองค์ประกอบหลายสิบหลายหมื่น ฉันควรใช้วิธีอื่นหรือไม่? ฉันกำลังมองหาบางอย่างที่ง่ายที่สุด

16
Java: วิธีทดสอบวิธีที่เรียกว่า System.exit ()
ฉันมีวิธีการสองสามอย่างที่ควรเรียกใช้System.exit()ในอินพุตบางตัว น่าเสียดายที่การทดสอบกรณีเหล่านี้ทำให้ JUnit สิ้นสุดลง! การวางการเรียกเมธอดในเธรดใหม่ดูเหมือนจะไม่ช่วยได้เนื่องจากSystem.exit()ยกเลิก JVM ไม่ใช่เฉพาะเธรดปัจจุบัน มีรูปแบบทั่วไปในการจัดการกับเรื่องนี้หรือไม่? ตัวอย่างเช่นผมสามารถ Subsitute ต้นขั้วหาSystem.exit()? [แก้ไข] ชั้นเรียนที่สงสัยเป็นเครื่องมือบรรทัดคำสั่งที่ฉันพยายามทดสอบภายใน JUnit บางที JUnit ไม่ใช่เครื่องมือที่เหมาะสมสำหรับงานใช่ไหม ข้อเสนอแนะสำหรับเครื่องมือทดสอบการถดถอยเสริมนั้นยินดีต้อนรับ (โดยเฉพาะสิ่งที่รวมเข้ากับ JUnit และ EclEmma ได้ดี)

10
การใช้ join () ในเธรด Python คืออะไร
ฉันกำลังศึกษาเกลียวหลามและพบjoin()ว่า ผู้เขียนบอกว่าหากเธรดอยู่ในโหมด daemon ฉันต้องใช้join()เพื่อให้เธรดสามารถเสร็จสิ้นได้ก่อนที่เธรดหลักจะยุติ แต่ฉันก็เห็นเขาใช้อยู่t.join()แม้ว่าจะtไม่ใช่daemon รหัสตัวอย่างนี้คือ import threading import time import logging logging.basicConfig(level=logging.DEBUG, format='(%(threadName)-10s) %(message)s', ) def daemon(): logging.debug('Starting') time.sleep(2) logging.debug('Exiting') d = threading.Thread(name='daemon', target=daemon) d.setDaemon(True) def non_daemon(): logging.debug('Starting') logging.debug('Exiting') t = threading.Thread(name='non-daemon', target=non_daemon) d.start() t.start() d.join() t.join() ฉันไม่รู้ว่าใช้t.join()อะไรเพราะไม่ใช่ภูตและฉันไม่เห็นการเปลี่ยนแปลงแม้ว่าฉันจะลบออก

7
เลือกระหว่างการส่งของ ExecutorService และ ExecutorService
ฉันควรเลือกระหว่างการ ส่งหรือดำเนินการของ ExecutorService ได้อย่างไรหากมูลค่าที่ส่งคืนไม่ใช่ข้อกังวลของฉัน หากฉันทดสอบทั้งสองฉันไม่เห็นความแตกต่างระหว่างสองอย่างนี้ยกเว้นค่าที่ส่งคืน ExecutorService threadExecutor = Executors.newSingleThreadExecutor(); threadExecutor.execute(new Task()); ExecutorService threadExecutor = Executors.newSingleThreadExecutor(); threadExecutor.submit(new Task());

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