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

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

14
Java เห็นพ้องด้วย: Countdown latch vs Cyclic barrier
ฉันอ่านผ่านjava.util.concurrent APIและพบว่า CountDownLatch: ตัวช่วยการซิงโครไนซ์ที่อนุญาตให้เธรดหนึ่งเธรดหรือมากกว่ารอจนกระทั่งชุดของการดำเนินการที่ดำเนินการในเธรดอื่นเสร็จสมบูรณ์ CyclicBarrier: เครื่องมือช่วยในการซิงโครไนซ์ที่อนุญาตให้ชุดของเธรดทั้งหมดรอให้กันและกันถึงจุดกีดขวางทั่วไป สำหรับฉันทั้งคู่ดูเหมือนเท่ากัน แต่ฉันมั่นใจว่ามีมากกว่านั้น CoundownLatch, the countdown value could not be reset, that can happen in the case of CyclicBarrierยกตัวอย่างเช่นใน มีความแตกต่างอื่น ๆ ระหว่างสองหรือไม่ ใครบ้างuse casesที่ต้องการรีเซ็ตค่าการนับถอยหลัง

17
การหยุดชะงักคืออะไร
เมื่อเขียนแอพพลิเคชั่นแบบมัลติเธรดหนึ่งในปัญหาที่พบบ่อยที่สุดคือการหยุดชะงัก คำถามของฉันต่อชุมชนคือ: การหยุดชะงักคืออะไร คุณตรวจจับพวกมันได้อย่างไร คุณจัดการกับพวกเขา? และในที่สุดคุณจะป้องกันไม่ให้เกิดขึ้นได้อย่างไร

5
การทำซ้ำ ConcurrentHashMap ทำให้เธรดปลอดภัยหรือไม่
ใน javadoc สำหรับConcurrentHashMapมีดังต่อไปนี้: การดำเนินการดึงข้อมูล (รวมทั้งรับ) โดยทั่วไปจะไม่บล็อกดังนั้นอาจทับซ้อนกับการดำเนินการอัปเดต (รวมถึงการย้ายและลบ) การดึงข้อมูลสะท้อนถึงผลลัพธ์ของการดำเนินการอัปเดตล่าสุดที่เสร็จสิ้นเมื่อเริ่มมีอาการ สำหรับการดำเนินการรวมเช่น putAll และ clear การดึงข้อมูลพร้อมกันอาจสะท้อนถึงการแทรกหรือการลบบางรายการเท่านั้น ในทำนองเดียวกัน Iterators และ Enumerations จะส่งคืนองค์ประกอบที่สะท้อนสถานะของตารางแฮช ณ จุดหนึ่งหรือตั้งแต่การสร้างตัววนซ้ำ / การแจงนับ พวกเขาจะไม่โยน ConcurrentModificationException อย่างไรก็ตามตัววนซ้ำได้รับการออกแบบให้ใช้งานได้ครั้งละหนึ่งเธรดเท่านั้น มันหมายความว่าอะไร? จะเกิดอะไรขึ้นถ้าฉันพยายามทำซ้ำแผนที่ด้วยสองเธรดในเวลาเดียวกัน จะเกิดอะไรขึ้นถ้าฉันใส่หรือลบค่าออกจากแผนที่ในขณะที่วนซ้ำ

3
HttpClient ปลอดภัยที่จะใช้พร้อมกันไหม
ในตัวอย่างทั้งหมดที่ฉันสามารถหาได้จากการใช้งานHttpClientนั้นใช้สำหรับการโทรแบบครั้งเดียว แต่จะเกิดอะไรขึ้นถ้าฉันมีสถานการณ์ไคลเอนต์แบบถาวรซึ่งสามารถทำการร้องขอหลายอย่างพร้อมกันได้ โดยทั่วไปเป็นที่ปลอดภัยที่จะเรียกclient.PostAsyncใน 2 HttpClientหัวข้อในครั้งเดียวกับอินสแตนซ์เดียวกันของ ฉันไม่ได้มองหาผลการทดลองที่นี่ ในฐานะที่เป็นตัวอย่างการทำงานอาจเป็นเรื่องบังเอิญ (และตัวอย่างที่ยังคงอยู่) และตัวอย่างที่ล้มเหลวอาจเป็นปัญหาการกำหนดค่าที่ผิดพลาด เป็นการดีที่ฉันกำลังมองหาคำตอบที่มีสิทธิ์สำหรับคำถามของการจัดการภาวะพร้อมกันใน HttpClient

6
iPhone - Grand Central Dispatch หัวข้อหลัก
ฉันใช้กับความสำเร็จการจัดส่งส่วนกลางที่ยิ่งใหญ่ในแอพของฉัน แต่ฉันสงสัยว่าประโยชน์ที่แท้จริงของการใช้บางสิ่งเช่นนี้คืออะไร: dispatch_async(dispatch_get_main_queue(), ^{ ... do stuff หรือแม้กระทั่ง dispatch_sync(dispatch_get_main_queue(), ^{ ... do stuff ฉันหมายถึงในทั้งสองกรณีคุณกำลังทำการบล็อกบล็อกที่จะถูกดำเนินการบนเธรดหลักตรงที่แอพทำงานและนี่จะไม่ช่วยลดภาระ ในกรณีแรกคุณไม่มีการควบคุมใด ๆ เมื่อบล็อกจะทำงาน ฉันได้เห็นกรณีของบล็อกถูกประหารชีวิตครึ่งวินาทีหลังจากที่คุณยิงพวกเขา กรณีที่สองมันคล้ายกับ [self doStuff]; ขวา? ฉันสงสัยว่าพวกคุณคิดอย่างไร

5
วิธีคงที่ไม่ซิงโครไนซ์เธรดปลอดภัยหรือไม่ถ้าพวกเขาไม่แก้ไขตัวแปรคลาสคงที่
ฉันสงสัยว่าคุณมีวิธีการคงที่ที่ไม่ได้ทำข้อมูลให้ตรงกัน แต่ไม่ได้แก้ไขตัวแปรคงที่ใด ๆ มันเป็นเธรดที่ปลอดภัยหรือไม่ จะเกิดอะไรขึ้นถ้าเมธอดสร้างตัวแปรโลคอลภายในมัน? ตัวอย่างเช่นรหัสต่อไปนี้ปลอดภัยไหม? public static String[] makeStringArray( String a, String b ){ return new String[]{ a, b }; } ดังนั้นถ้าฉันมีสองเธรดเรียกวิธีการอย่างต่อเนื่องและพร้อมกันหนึ่งกับสุนัข (พูดว่า "Great dane" และ "bull dog") และอื่น ๆ ที่มีแมว (พูดว่า "เปอร์เซีย" และ "สยาม") ฉันจะเคยได้รับแมวและสุนัข อยู่ในอาร์เรย์เดียวกันหรือไม่ หรือแมวและสุนัขจะไม่อยู่ในกระบวนการเดียวกันในเวลาเดียวกันหรือไม่?

4
เทียบกับ Greenlet หัวข้อ
ฉันยังใหม่กับ gevents และ greenlets ฉันพบเอกสารที่ดีเกี่ยวกับวิธีการทำงานกับเอกสารเหล่านั้น แต่ไม่มีใครให้เหตุผลแก่ฉันเกี่ยวกับวิธีและเวลาที่ฉันควรใช้กรีนเล็ต! พวกเขาเก่งเรื่องอะไรดี? เป็นความคิดที่ดีที่จะใช้มันในพร็อกซีเซิร์ฟเวอร์หรือไม่? ทำไมไม่หัวข้อ? สิ่งที่ฉันไม่แน่ใจคือพวกเขาสามารถให้เราพร้อมกันได้อย่างไร

10
ตัวอย่างที่ดีของ livelock?
ฉันเข้าใจว่า livelock คืออะไร แต่ฉันสงสัยว่าใครมีตัวอย่างโค้ดที่ดี? และโดยใช้รหัสฉันไม่ได้หมายความว่า "คนสองคนพยายามที่จะผ่านกันในทางเดิน" ถ้าฉันอ่านมันอีกครั้งฉันจะทำอาหารเที่ยง

12
การรับค่าจาก java.util.HashMap นั้นปลอดภัยจากหลายเธรดหรือไม่?
มีกรณีที่แผนที่จะถูกสร้างขึ้นและเมื่อมีการเริ่มต้นมันจะไม่ถูกแก้ไขอีกครั้ง อย่างไรก็ตามจะสามารถเข้าถึงได้ (ผ่านรับ (คีย์) เท่านั้น) จากหลายเธรด วิธีนี้ปลอดภัยไหมที่จะใช้java.util.HashMap? (ปัจจุบันฉันใช้อย่างมีความสุขjava.util.concurrent.ConcurrentHashMapและไม่จำเป็นต้องวัดเพื่อปรับปรุงประสิทธิภาพ แต่ฉันแค่อยากรู้อยากเห็นว่าเรียบง่ายHashMapพอเพียงดังนั้นคำถามนี้ไม่ใช่ "ฉันควรใช้อันไหนดี?" และไม่ใช่คำถามประสิทธิภาพ ค่อนข้างคำถามคือ "จะปลอดภัยหรือไม่")

4
ชุดเธรดปลอดภัยประเภทต่างๆใน Java
ดูเหมือนว่าจะมีการใช้งานและวิธีการสร้างชุดเธรดที่ปลอดภัยใน Java ที่แตกต่างกันมากมาย ตัวอย่างบางส่วน ได้แก่ 1) CopyOnWriteArraySet 2) Collections.synchronizedSet (ชุดเซ็ต) 3) ConcurrentSkipListSet 4) Collections.newSetFromMap (ใหม่ ConcurrentHashMap ()) 5) ชุดอื่น ๆ ที่สร้างขึ้นในลักษณะคล้ายกับ (4) ตัวอย่างเหล่านี้มาจากรูปแบบพร้อมกัน: การใช้งานชุดพร้อมกันใน Java 6 ใครช่วยอธิบายความแตกต่างข้อดีข้อเสียของตัวอย่างเหล่านี้และอื่น ๆ ได้ไหม ฉันมีปัญหาในการทำความเข้าใจและรักษาทุกอย่างให้ตรงจาก Java Std Docs
138 java  concurrency  set 


4
อัลกอริทึมการเรียงลำดับแบบขนานใดที่มีประสิทธิภาพกรณีเฉลี่ยที่ดีที่สุด
การเรียงลำดับใช้ O (n log n) ในกรณีอนุกรม หากเรามีโปรเซสเซอร์ O (n) เราหวังว่าจะได้รับการเร่งความเร็วเชิงเส้น O (log n) อัลกอริทึมแบบขนานมีอยู่ แต่มีค่าคงที่สูงมาก นอกจากนี้ยังไม่สามารถใช้ได้กับฮาร์ดแวร์สินค้าโภคภัณฑ์ซึ่งไม่มีที่ใดก็ได้ใกล้กับโปรเซสเซอร์ O (n) ด้วยโปรเซสเซอร์ p อัลกอริทึมที่เหมาะสมควรใช้เวลา O (n / p log n) ในกรณีอนุกรมการเรียงลำดับด่วนมีความซับซ้อนของรันไทม์โดยเฉลี่ยดีที่สุด อัลกอริธึมการเรียงลำดับด่วนแบบคู่ขนานนั้นใช้งานง่าย (ดูที่นี่และที่นี่ ) อย่างไรก็ตามมันทำงานได้ไม่ดีเนื่องจากขั้นตอนแรกคือการแบ่งพาร์ติชันคอลเลกชันทั้งหมดบนคอร์เดียว ฉันพบข้อมูลเกี่ยวกับอัลกอริทึมการจัดเรียงแบบขนานมากมาย แต่จนถึงขณะนี้ฉันยังไม่เห็นสิ่งใดที่ชี้ไปที่ผู้ชนะที่ชัดเจน ฉันต้องการจัดเรียงรายการ 1 ล้านถึง 100 ล้านองค์ประกอบในภาษา JVM ที่ทำงานบน 8 ถึง 32 คอร์

8
.NET - การล็อกพจนานุกรมเทียบกับ ConcurrentDictionary
ฉันหาข้อมูลเกี่ยวกับConcurrentDictionaryประเภทไม่เพียงพอจึงคิดว่าจะถามเกี่ยวกับเรื่องนี้ที่นี่ ขณะนี้ฉันใช้ a Dictionaryเพื่อระงับผู้ใช้ทั้งหมดที่มีการเข้าถึงหลายเธรดอย่างต่อเนื่อง (จากเธรดพูลจึงไม่มีจำนวนเธรดที่แน่นอน) และมีการซิงโครไนซ์การเข้าถึง ฉันเพิ่งพบว่ามีชุดของคอลเลกชันที่ปลอดภัยต่อเธรดใน. NET 4.0 และดูเหมือนว่าจะเป็นที่ชื่นชอบมาก ฉันสงสัยว่าตัวเลือก 'มีประสิทธิภาพและจัดการง่ายกว่า' จะเป็นอย่างไรเนื่องจากฉันมีตัวเลือกระหว่างการDictionaryเข้าถึงแบบปกติกับการเข้าถึงแบบซิงโครไนซ์หรือมีConcurrentDictionaryเธรดที่ปลอดภัยอยู่แล้ว อ้างอิงถึง. NET 4.0 ConcurrentDictionary

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

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

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