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

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

11
เธรดกับ ThreadPool
ความแตกต่างระหว่างการใช้เธรดใหม่และการใช้เธรดจากเธรดพูลคืออะไร? มีประโยชน์ด้านประสิทธิภาพอะไรบ้างและเหตุใดฉันจึงควรพิจารณาใช้เธรดจากพูลแทนที่จะใช้เธรดที่ฉันสร้างขึ้นอย่างชัดเจน ฉันกำลังคิดถึง. NET ที่นี่โดยเฉพาะ แต่ตัวอย่างทั่วไปก็ใช้ได้

5
Asynctask vs Thread ใน Android
ใน UI เพื่อทำงานเบื้องหลังบางอย่างฉันใช้ไฟล์Thread. แต่ตามที่คนอื่นแนะนำตอนนี้ฉันใช้AsyncTask. อะไรคือความแตกต่างหลักระหว่าง a Threadและ an AsyncTask? ในสถานการณ์ใดฉันควรใช้ a ThreadหรือAsyncTask?

10
อะไรคือความแตกต่างระหว่าง mutex และส่วนวิกฤต?
กรุณาอธิบายจาก Linux, Windows มุมมอง? ฉันกำลังเขียนโปรแกรมในภาษา C # คำศัพท์ทั้งสองนี้จะสร้างความแตกต่างได้หรือไม่ กรุณาโพสต์ให้มากที่สุดพร้อมตัวอย่างและเช่น .... ขอบคุณ

3
อะไรคือความแตกต่างระหว่าง packaged_task และ async
ในขณะที่ทำงานกับโมเดลเธรดของ C ++ 11 ฉันสังเกตเห็นว่า std::packaged_task<int(int,int)> task([](int a, int b) { return a + b; }); auto f = task.get_future(); task(2,3); std::cout << f.get() << '\n'; และ auto f = std::async(std::launch::async, [](int a, int b) { return a + b; }, 2, 3); std::cout << f.get() << '\n'; ดูเหมือนจะทำในสิ่งเดียวกัน ฉันเข้าใจว่าอาจมีความแตกต่างที่สำคัญถ้าฉันวิ่งไปstd::asyncด้วยstd::launch::deferredแต่ในกรณีนี้มีไหม …

10
C ++ 0x ไม่มี semaphores? จะซิงโครไนซ์เธรดได้อย่างไร?
C ++ 0x จะมาโดยไม่มี semaphores จริงหรือ? มีคำถามบางอย่างเกี่ยวกับ Stack Overflow เกี่ยวกับการใช้ semaphores อยู่แล้ว ฉันใช้มัน (posix semaphores) ตลอดเวลาเพื่อให้เธรดรอเหตุการณ์บางอย่างในเธรดอื่น: void thread0(...) { doSomething0(); event1.wait(); ... } void thread1(...) { doSomething1(); event1.post(); ... } ถ้าฉันจะทำแบบนั้นกับ mutex: void thread0(...) { doSomething0(); event1.lock(); event1.unlock(); ... } void thread1(...) { event1.lock(); doSomethingth1(); event1.unlock(); ... } ปัญหา: มันน่าเกลียดและไม่รับประกันว่า …

3
ทำความเข้าใจกับ Event Loop
ฉันกำลังคิดถึงมันและนี่คือสิ่งที่ฉันคิดขึ้นมา: ลองดูโค้ดด้านล่างนี้: console.clear(); console.log("a"); setTimeout(function(){console.log("b");},1000); console.log("c"); setTimeout(function(){console.log("d");},0); มีคำขอเข้ามาและเอ็นจิน JS เริ่มดำเนินการโค้ดด้านบนทีละขั้นตอน สองสายแรกคือสายซิงค์ แต่เมื่อพูดถึงsetTimeoutวิธีการมันจะกลายเป็นการดำเนินการแบบ async แต่ JS กลับมาจากมันทันทีและดำเนินการต่อซึ่งเรียกว่าNon-BlockingหรือAsync. และมันยังคงทำงานอื่น ๆ ผลลัพธ์ของการดำเนินการนี้มีดังต่อไปนี้: acdb โดยพื้นฐานแล้วครั้งที่สองsetTimeoutจะเสร็จสิ้นก่อนและฟังก์ชันเรียกกลับของมันจะถูกเรียกใช้งานเร็วกว่าฟังก์ชันแรกและนั่นก็สมเหตุสมผล เรากำลังพูดถึงแอปพลิเคชันเธรดเดียวที่นี่ JS Engine ยังคงดำเนินการสิ่งนี้ต่อไปและเว้นแต่ว่าจะเสร็จสิ้นคำขอแรกจะไม่ไปที่คำขอที่สอง แต่สิ่งที่ดีคือมันจะไม่รอให้การดำเนินการบล็อกเหมือนsetTimeoutจะแก้ไขดังนั้นมันจะเร็วกว่าเพราะยอมรับคำขอที่เข้ามาใหม่ แต่คำถามของฉันเกิดขึ้นจากรายการต่อไปนี้: # 1:หากเรากำลังพูดถึงแอปพลิเคชันแบบเธรดเดียวกลไกใดที่ประมวลผลsetTimeoutsในขณะที่เอ็นจิ้น JS ยอมรับคำขอเพิ่มเติมและดำเนินการ เธรดเดี่ยวทำงานต่อไปยังคำขออื่น ๆ อย่างไร สิ่งที่ใช้ได้ผลในsetTimeoutขณะที่คำขออื่นเข้ามาและดำเนินการ # 2:หากsetTimeoutฟังก์ชันเหล่านี้ถูกเรียกใช้งานเบื้องหลังในขณะที่มีคำขอเข้ามาและกำลังดำเนินการมากขึ้นสิ่งที่ดำเนินการประมวลผลแบบ async อยู่เบื้องหลัง? สิ่งที่เราพูดถึงนี้เรียกว่าEventLoopอะไร? # 3:แต่ไม่ควรใส่วิธีการทั้งหมดEventLoopเพื่อให้สิ่งทั้งหมดถูกดำเนินการและเรียกวิธีการโทรกลับ? นี่คือสิ่งที่ฉันเข้าใจเมื่อพูดถึงฟังก์ชันการโทรกลับ: function downloadFile(filePath, callback) { blah.downloadFile(filePath); callback(); } …

10
Asynchronous vs Multithreading - มีความแตกต่างหรือไม่?
การโทรแบบอะซิงโครนัสสร้างเธรดใหม่เสมอหรือไม่ อะไรคือความแตกต่างระหว่างทั้งสอง? การเรียกแบบอะซิงโครนัสสร้างหรือใช้เธรดใหม่เสมอหรือไม่ Wikipedia พูดว่า : ในการเขียนโปรแกรมคอมพิวเตอร์เหตุการณ์แบบอะซิงโครนัสคือเหตุการณ์ที่เกิดขึ้นโดยไม่ขึ้นกับผังรายการหลัก การดำเนินการแบบอะซิงโครนัสคือการดำเนินการในรูปแบบที่ไม่ปิดกั้นทำให้โฟลว์โปรแกรมหลักดำเนินการประมวลผลต่อไป ฉันรู้ว่าการโทรแบบ async สามารถทำได้ในเธรดเดียว? เป็นไปได้อย่างไร?

17
เธรดของ Windows: _beginthread vs _beginthreadex vs CreateThread C ++
สิ่งที่เป็นวิธีที่ดีกว่าที่จะเริ่มต้นด้าย_beginthread, _beginthreadxหรือCreateThread? ฉันพยายามที่จะตรวจสอบสิ่งที่เป็นข้อดี / ข้อเสียของ_beginthread, และ_beginthreadex CreateThreadฟังก์ชั่นทั้งหมดนี้ส่งคืนตัวจัดการเธรดไปยังเธรดที่สร้างขึ้นใหม่ฉันรู้อยู่แล้วว่า CreateThread ให้ข้อมูลเพิ่มเติมเล็กน้อยเมื่อเกิดข้อผิดพลาด (สามารถตรวจสอบได้โดยการโทรGetLastError) ... แต่มีสิ่งใดบ้างที่ฉันควรพิจารณาเมื่อฉัน m โดยใช้ฟังก์ชันเหล่านี้หรือไม่ ฉันกำลังทำงานกับแอปพลิเคชัน windows ดังนั้นความเข้ากันได้ข้ามแพลตฟอร์มจึงไม่เป็นปัญหา ฉันได้อ่านเอกสาร msdn แล้วและฉันก็ไม่เข้าใจเช่นทำไมใคร ๆ ถึงตัดสินใจใช้ _beginthread แทน CreateThread หรือในทางกลับกัน ไชโย! อัปเดต: โอเคขอบคุณสำหรับข้อมูลทั้งหมดฉันได้อ่านในสถานที่สองสามแห่งที่ฉันไม่สามารถโทรหาได้WaitForSingleObject()หากฉันใช้_beginthread()แต่ถ้าฉันโทร_endthread()ในเธรดจะไม่ได้ผล? มีข้อตกลงอะไรบ้าง?
134 c++  c  multithreading  winapi 

6
ฉันควรใช้คิวใดพร้อมกันใน Java
จาก JavaDocs: ConcurrentLinkedQueueเป็นทางเลือกที่เหมาะสมเมื่อหลายกระทู้จะแบ่งปันการเข้าถึงคอลเลกชันที่พบบ่อย คิวนี้ไม่อนุญาตองค์ประกอบ null ArrayBlockingQueueเป็น "บัฟเฟอร์ที่มีขอบเขต" แบบคลาสสิกซึ่งอาร์เรย์ที่มีขนาดคงที่จะเก็บองค์ประกอบที่ผู้ผลิตแทรกและสกัดโดยผู้บริโภค คลาสนี้สนับสนุนนโยบายความเป็นธรรมที่เป็นทางเลือกสำหรับการสั่งซื้อเธรดผู้ผลิตและผู้บริโภคที่รอคอย โดยทั่วไปLinkedBlockingQueueจะมีปริมาณงานที่สูงกว่าคิวที่ใช้อาร์เรย์ แต่ประสิทธิภาพที่คาดเดาได้น้อยกว่าในแอปพลิเคชันที่ทำงานพร้อมกันส่วนใหญ่ ฉันมี 2 สถานการณ์สถานการณ์หนึ่งต้องการคิวเพื่อสนับสนุนผู้ผลิตหลายราย (เธรดที่ใช้) กับผู้บริโภครายหนึ่งและอีกสถานการณ์หนึ่งเป็นอีกทางหนึ่ง ฉันไม่เข้าใจว่าจะใช้การนำไปใช้งานใด ใครสามารถอธิบายความแตกต่างคืออะไร? นอกจากนี้ 'นโยบายความเป็นธรรมทางเลือก' ArrayBlockingQueueคืออะไรใน?

7
ฉันจะรันโค้ดบนเธรดพื้นหลังบน Android ได้อย่างไร
ฉันต้องการให้โค้ดทำงานอยู่เบื้องหลังอย่างต่อเนื่อง ฉันไม่ต้องการทำในสถานบริการ มีวิธีอื่นที่เป็นไปได้หรือไม่? ฉันพยายามโทรหาThreadชั้นเรียนในชั้นเรียนActivityแต่Activityยังคงอยู่ในพื้นหลังอยู่สักพักแล้วมันก็หยุดลง Threadชั้นยังหยุดการทำงาน class testThread implements Runnable { @Override public void run() { File file = new File( Environment.getExternalStorageDirectory(), "/BPCLTracker/gpsdata.txt" ); int i = 0; RandomAccessFile in = null; try { in = new RandomAccessFile( file, "rw" ); } catch (FileNotFoundException e) { // TODO Auto-generated catch block …

6
จะรับ id เธรดจากเธรดพูลได้อย่างไร
ฉันมีกลุ่มเธรดคงที่ที่ฉันส่งงานให้ (จำกัด5เธรด) ฉันจะทราบได้อย่างไรว่าเธรดหนึ่งใน5เธรดใดดำเนินการกับงานของฉัน (เช่น "เธรด # 3 จาก5กำลังทำงานนี้") ExecutorService taskExecutor = Executors.newFixedThreadPool(5); //in infinite loop: taskExecutor.execute(new MyTask()); .... private class MyTask implements Runnable { public void run() { logger.debug("Thread # XXX is doing this task");//how to get thread id? } }

3
thread_local หมายถึงอะไรใน C ++ 11
ฉันสับสนกับคำอธิบายthread_localใน C ++ 11 ความเข้าใจของฉันคือแต่ละเธรดมีสำเนาเฉพาะของตัวแปรท้องถิ่นในฟังก์ชัน ตัวแปรส่วนกลาง / คงที่สามารถเข้าถึงได้โดยเธรดทั้งหมด (อาจซิงโครไนซ์การเข้าถึงโดยใช้การล็อก) และthread_localตัวแปรสามารถมองเห็นได้สำหรับเธรดทั้งหมด แต่สามารถแก้ไขได้โดยเธรดที่กำหนดไว้เท่านั้น? ถูกต้องหรือไม่

10
การรวมเธรดใน C ++ 11
คำถามที่เกี่ยวข้อง : เกี่ยวกับ C ++ 11: C ++ 11: std :: เธรดรวม? async (เปิดตัว :: async) ใน C ++ 11 จะทำให้เธรดพูลล้าสมัยเพื่อหลีกเลี่ยงการสร้างเธรดที่มีราคาแพงหรือไม่ เกี่ยวกับ Boost: C ++ เพิ่มเธรดใช้เธรดซ้ำ เพิ่ม :: เธรดและสร้างกลุ่มของพวกเขา! ฉันจะได้รับกลุ่มเธรดเพื่อส่งงานโดยไม่ต้องสร้างและลบซ้ำแล้วซ้ำอีกได้อย่างไร ซึ่งหมายความว่าเธรดแบบถาวรจะซิงโครไนซ์ใหม่โดยไม่ต้องเข้าร่วม ฉันมีรหัสที่มีลักษณะดังนี้: namespace { std::vector<std::thread> workers; int total = 4; int arr[4] = {0}; void each_thread_does(int i) { arr[i] += …

5
เมื่อใดควรใช้สารระเหยร่วมกับเธรดหลายตัว?
หากมีเธรดสองเธรดที่เข้าถึงตัวแปรโกลบอลบทช่วยสอนจำนวนมากบอกว่าทำให้ตัวแปรระเหยเพื่อป้องกันไม่ให้คอมไพลเลอร์แคชตัวแปรในรีจิสเตอร์และทำให้ไม่ได้รับการอัพเดตอย่างถูกต้อง อย่างไรก็ตามสองเธรดทั้งสองเข้าถึงตัวแปรที่ใช้ร่วมกันเป็นสิ่งที่เรียกร้องให้มีการป้องกันผ่าน mutex ไม่ใช่เหรอ? แต่ในกรณีนั้นระหว่างการล็อกเธรดและการปล่อย mutex รหัสจะอยู่ในส่วนวิกฤตที่มีเพียงเธรดเดียวเท่านั้นที่สามารถเข้าถึงตัวแปรได้ซึ่งในกรณีนี้ตัวแปรไม่จำเป็นต้องระเหย? ดังนั้นการใช้งาน / วัตถุประสงค์ของการระเหยในโปรแกรมมัลติเธรดคืออะไร?


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