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

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

6
std :: unique_lock <std :: mutex> หรือ std :: lock_guard <std :: mutex>?
ตั้งค่าใหม่ให้กับStack Overflow ที่ใช้งานอยู่ : Чем std :: unique_lock отличаетсяот std :: lock_guard? ฉันมีสองกรณีใช้ A. ฉันต้องการซิงโครไนซ์การเข้าถึงโดยสองเธรดกับคิว B. ฉันต้องการซิงโครไนซ์การเข้าถึงโดยสองเธรดกับคิวและใช้ตัวแปรเงื่อนไขเพราะหนึ่งในเธรดจะรอเนื้อหาที่จะเก็บไว้ในคิวโดยเธรดอื่น สำหรับกรณีที่ใช้ AI std::lock_guard&lt;&gt;ดูตัวอย่างการใช้รหัส สำหรับกรณีการใช้งาน BI std::unique_lock&lt;&gt;ดูตัวอย่างการใช้รหัส อะไรคือความแตกต่างระหว่างทั้งสองกับสิ่งที่ฉันควรใช้ในกรณีที่ใช้?

9
เธรดพูลคล้ายกับการประมวลผลหลายพูล?
มีคลาส Pool สำหรับเธรดผู้ปฏิบัติงานซึ่งคล้ายกับคลาส Poolของโมดูลมัลติโพรเซสเซอร์หรือไม่? ฉันชอบตัวอย่างวิธีที่ง่ายที่สุดในการทำให้ขนานกับฟังก์ชันแผนที่ def long_running_func(p): c_func_no_gil(p) p = multiprocessing.Pool(4) xs = p.map(long_running_func, range(100)) อย่างไรก็ตามฉันต้องการทำโดยไม่มีค่าใช้จ่ายในการสร้างกระบวนการใหม่ ฉันรู้เกี่ยวกับ GIL อย่างไรก็ตามใน usecase ของฉันฟังก์ชั่นจะเป็นฟังก์ชั่น C แบบ IO-bound ซึ่งตัวห่องูหลามจะปล่อย GIL ก่อนการเรียกใช้ฟังก์ชันจริง ฉันต้องเขียนเธรดพูลของตัวเองหรือไม่?

13
เธรดการโทรไม่สามารถเข้าถึงวัตถุนี้ได้เนื่องจากเธรดอื่นเป็นเจ้าของ
รหัสของฉันเป็นดังนี้ public CountryStandards() { InitializeComponent(); try { FillPageControls(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Country Standards", MessageBoxButton.OK, MessageBoxImage.Error); } } /// &lt;summary&gt; /// Fills the page controls. /// &lt;/summary&gt; private void FillPageControls() { popUpProgressBar.IsOpen = true; lblProgress.Content = "Loading. Please wait..."; progress.IsIndeterminate = true; worker = new BackgroundWorker(); worker.DoWork += …

20
วิธีรับค่าส่งคืนจากเธรดในไพ ธ อน?
ฟังก์ชั่นด้านล่างผลตอบแทนสตริงfoo 'foo'ฉันจะรับค่า'foo'ซึ่งส่งคืนจากเป้าหมายของเธรดได้อย่างไร from threading import Thread def foo(bar): print('hello {}'.format(bar)) return 'foo' thread = Thread(target=foo, args=('world!',)) thread.start() return_value = thread.join() "การเป็นหนึ่งในวิธีที่ชัดเจนที่จะทำมัน" ที่ปรากฏข้างต้นไม่ได้ทำงาน: กลับthread.join()None

15
ฉันจะเรียกใช้รหัสง่ายๆในเธรดใหม่ได้อย่างไร
ฉันมีรหัสเล็กน้อยที่ฉันต้องการเรียกใช้ในเธรดที่แตกต่างจาก GUI เนื่องจากมันทำให้ฟอร์มหยุดทำงานในขณะที่โค้ดทำงาน (10 วินาทีหรือมากกว่านั้น) สมมติว่าฉันไม่เคยสร้างเธรดใหม่มาก่อน ตัวอย่างง่ายๆ / พื้นฐานของวิธีทำสิ่งนี้ใน C # และการใช้. NET Framework 2.0 หรือใหม่กว่าคืออะไร
340 c#  .net  multithreading 


16
การรันโค้ดในเธรดหลักจากเธรดอื่น
ในบริการ android ฉันได้สร้างเธรด (s) สำหรับการทำงานพื้นหลังบางอย่าง Runnableฉันมีสถานการณ์ที่หัวข้อที่ต้องการที่จะโพสต์งานบางอย่างในคิวข้อความหัวข้อหลักของตัวอย่างที่ มีวิธีรับHandlerเธรดหลักและโพสต์Message/ Runnableไปยังเธรดอื่นหรือไม่ ขอบคุณ

29
การใช้โมดูล 'กระบวนการย่อย' กับการหมดเวลา
Наэтотвопросестьответына Stack Overflow нарусском : ผู้สร้าง: นี่คือรหัสไพ ธ อนเพื่อเรียกใช้คำสั่งโดยพลการส่งคืนstdoutข้อมูลหรือเพิ่มข้อยกเว้นรหัสการออกที่ไม่เป็นศูนย์: proc = subprocess.Popen( cmd, stderr=subprocess.STDOUT, # Merge stdout and stderr stdout=subprocess.PIPE, shell=True) communicate ถูกใช้เพื่อรอให้กระบวนการออกจาก: stdoutdata, stderrdata = proc.communicate() subprocessโมดูลไม่สนับสนุนการหมดเวลา - ความสามารถในการฆ่ากระบวนการทำงานมานานกว่าจำนวน X วินาที - จึงcommunicateอาจใช้เวลาตลอดไปวิ่ง เป็นอะไรที่ง่ายวิธีที่จะใช้หมดเวลาในโปรแกรมหลามหมายถึงการทำงานบน Windows และ Linux?


11
รับ ID เธรดจากเธรด
ใน C # เมื่อทำการดีบักเธรดคุณสามารถดู ID ของแต่ละเธรดได้ ฉันไม่พบวิธีรับเธรดเดียวกันโดยทางโปรแกรม ฉันไม่สามารถรับ ID ของเธรดปัจจุบันได้ (ในคุณสมบัติของThread.currentThread) ดังนั้นฉันจึงสงสัยว่า Visual Studio รับ ID ของเธรดได้อย่างไรและมีวิธีรับหมายเลขอ้างอิงของเธรดที่มี id 2345อย่างไร
319 c#  .net  multithreading 

8
เหตุใดจึงต้องใช้ ReentrantLock ถ้าใครสามารถใช้ข้อมูลให้ตรงกัน (นี่)
synchronized (this)ฉันพยายามที่จะเข้าใจสิ่งที่ทำให้ล็อคในการทำงานพร้อมกันที่สำคัญดังนั้นหากสามารถใช้ ในรหัสจำลองด้านล่างฉันสามารถทำอย่างใดอย่างหนึ่ง: ทำข้อมูลให้ตรงกันทั้งวิธีหรือประสานพื้นที่เสี่ยง ( synchronized(this){...}) หรือล็อคพื้นที่โค้ดที่มีช่องโหว่ด้วย ReentrantLock รหัส: private final ReentrantLock lock = new ReentrantLock(); private static List&lt;Integer&gt; ints; public Integer getResult(String name) { . . . lock.lock(); try { if (ints.size()==3) { ints=null; return -9; } for (int x=0; x&lt;ints.size(); x++) { System.out.println("["+name+"] "+x+"/"+ints.size()+". values &gt;&gt;&gt;&gt;"+ints.get(x)); } } …

7
การจัดการ InterruptedException ใน Java
ความแตกต่างระหว่างวิธีการจัดการต่อไปนี้InterruptedExceptionคืออะไร? วิธีที่ดีที่สุดที่จะทำคืออะไร? try{ //... } catch(InterruptedException e) { Thread.currentThread().interrupt(); } หรือ try{ //... } catch(InterruptedException e) { throw new RuntimeException(e); } แก้ไข: ฉันต้องการที่จะรู้ว่าในสถานการณ์เหล่านี้ใช้ทั้งสอง

5
คีย์เวิร์ดที่ซิงโครไนซ์ของ Java เวอร์ชัน C # หรือไม่
c # มีคีย์เวิร์ด "ซิงโครไนซ์" ของ Java เวอร์ชันของตัวเองหรือไม่ เช่นใน java มันสามารถระบุได้ทั้งฟังก์ชั่นวัตถุหรือบล็อกของรหัสเช่น: public synchronized void doImportantStuff() { // dangerous code goes here. } หรือ public void doImportantStuff() { // trivial stuff synchronized(someLock) { // dangerous code goes here. } }

12
จำนวนกระทู้มีมากเกินไป
ฉันกำลังเขียนเซิร์ฟเวอร์และฉันส่งแต่ละการกระทำของลงในเธรดแยกต่างหากเมื่อได้รับการร้องขอ ฉันทำเช่นนี้เพราะเกือบทุกคำขอทำให้แบบสอบถามฐานข้อมูล ฉันใช้ไลบรารีเธรดพูลเพื่อลดการสร้าง / ทำลายเธรด คำถามของฉันคืออะไรจุดตัดที่ดีสำหรับเธรด I / O เช่นนี้คืออะไร ฉันรู้ว่ามันเป็นเพียงการประมาณการคร่าวๆ แต่เราจะพูดหลายร้อย? พัน? ฉันจะหาการตัดยอดนี้ได้อย่างไร? แก้ไข: ขอบคุณสำหรับคำตอบของคุณดูเหมือนว่าฉันจะต้องทดสอบมันเพื่อหาเพดานการนับด้ายของฉัน คำถามคือ: ฉันจะรู้ได้อย่างไรว่าฉันไปถึงเพดานนั้นแล้ว? ฉันควรวัดอะไรอย่างแน่นอน

8
เมื่อใดที่ใช้ AtomicReference ใน Java
เราจะใช้เมื่อไหร่AtomicReference? จำเป็นต้องสร้างวัตถุในโปรแกรมแบบมัลติเธรดทั้งหมดหรือไม่? ระบุตัวอย่างง่ายๆที่ควรใช้ AtomicReference

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