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

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

7
จอภาพใน Java คืออะไร?
จอภาพที่อ้างถึงในการเขียนโปรแกรมพร้อมกันใน Java คืออะไร? เมื่ออ่านพบว่า "ทุกวัตถุเชื่อมโยงกับจอภาพ" หมายความว่าอย่างไร เป็นวัตถุพิเศษหรือไม่?

12
วิธีการเรียกใช้เมธอดแบบอะซิงโครนัสใน Java
เมื่อเร็ว ๆ นี้ฉันได้ดู goroutines ของ Goและคิดว่าคงจะดีถ้ามีอะไรที่คล้ายกันใน Java เท่าที่ฉันได้ค้นหาวิธีทั่วไปในการขนานการเรียกเมธอดคือทำสิ่งต่างๆเช่น: final String x = "somethingelse"; new Thread(new Runnable() { public void run() { x.matches("something"); } }).start(); นั่นไม่สง่างามมาก มีวิธีที่ดีกว่านี้หรือไม่? ฉันต้องการโซลูชันดังกล่าวในโปรเจ็กต์ดังนั้นฉันจึงตัดสินใจใช้คลาส wrapper ของฉันเองโดยใช้การเรียกเมธอด async ฉันตีพิมพ์ระดับกระดาษห่อของฉันในJ-Go แต่ฉันไม่รู้ว่ามันเป็นทางออกที่ดีหรือเปล่า การใช้งานนั้นง่ายมาก: SampleClass obj = ... FutureResult<Integer> res = ... Go go = new Go(obj); go.callLater(res, "intReturningMethod", 10); //10 …

13
เป็นไปไม่ได้ที่จะสร้างพูลเธรดแบบแคชที่มีขนาด จำกัด ?
ดูเหมือนว่าจะเป็นไปไม่ได้ที่จะสร้างพูลเธรดที่แคชโดย จำกัด จำนวนเธรดที่สามารถสร้างได้ นี่คือวิธีการใช้งาน Executors.newCachedThreadPool แบบคงที่ในไลบรารี Java มาตรฐาน: public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()); } ดังนั้นการใช้เทมเพลตนั้นเพื่อสร้างพูลเธรดที่แคชขนาดคงที่: new ThreadPoolExecutor(0, 3, 60L, TimeUnit.SECONDS, new SynchronusQueue<Runable>()); ตอนนี้ถ้าคุณใช้สิ่งนี้และส่งงาน 3 อย่างทุกอย่างจะเรียบร้อย การส่งงานเพิ่มเติมใด ๆ จะทำให้ถูกปฏิเสธข้อยกเว้นในการดำเนินการ ลองทำสิ่งนี้: new ThreadPoolExecutor(0, 3, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runable>()); จะส่งผลให้เธรดทั้งหมดดำเนินการตามลำดับ กล่าวคือเธรดพูลจะไม่สร้างเธรดมากกว่าหนึ่งเธรดเพื่อจัดการงานของคุณ นี่คือบั๊กในวิธีการรันของ ThreadPoolExecutor? หรืออาจจะเป็นความตั้งใจ? หรือมีวิธีอื่นบ้าง? …


5
จะใช้คุณสมบัติ Can CancelToken ได้อย่างไร?
เมื่อเทียบกับรหัสก่อนหน้าสำหรับคลาส RulyCancelerฉันต้องการเรียกใช้โค้ดโดยใช้ CancellationTokenSource. ฉันจะใช้มันตามที่ระบุไว้ในโทเค็นการยกเลิกได้อย่างไรโดยไม่ต้องโยน / จับข้อยกเว้น ฉันสามารถใช้IsCancellationRequestedทรัพย์สินได้หรือไม่? ฉันพยายามใช้มันในลักษณะนี้: cancelToken.ThrowIfCancellationRequested(); และ try { new Thread(() => Work(cancelSource.Token)).Start(); } catch (OperationCanceledException) { Console.WriteLine("Canceled!"); } แต่สิ่งนี้ทำให้เกิดข้อผิดพลาดรันไทม์cancelToken.ThrowIfCancellationRequested();ในวิธีการWork(CancellationToken cancelToken): System.OperationCanceledException was unhandled Message=The operation was canceled. Source=mscorlib StackTrace: at System.Threading.CancellationToken.ThrowIfCancellationRequested() at _7CancellationTokens.Token.Work(CancellationToken cancelToken) in C:\xxx\Token.cs:line 33 at _7CancellationTokens.Token.<>c__DisplayClass1.<Main>b__0() in C:\xxx\Token.cs:line 22 at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at …

6
พร้อมกันกับคิวอนุกรมใน GCD
ฉันกำลังดิ้นรนเพื่อทำความเข้าใจอย่างถ่องแท้เกี่ยวกับคิวแบบต่อเนื่องและแบบอนุกรมใน GCD ฉันมีปัญหาบางอย่างและหวังว่าจะมีคนตอบฉันได้อย่างชัดเจนและตรงประเด็น ฉันกำลังอ่านว่ามีการสร้างและใช้คิวอนุกรมเพื่อดำเนินการทีละงาน อย่างไรก็ตามจะเกิดอะไรขึ้นหาก: ฉันสร้างคิวอนุกรม ฉันใช้dispatch_async(ในคิวอนุกรมที่ฉันเพิ่งสร้างขึ้น) สามครั้งเพื่อส่งสามบล็อก A, B, C สามบล็อกจะดำเนินการ: ตามลำดับ A, B, C เนื่องจากคิวเป็นแบบอนุกรม หรือ ในเวลาเดียวกัน (ในเวลาเดียวกันกับเธรดพาร์ราเลล) เนื่องจากฉันใช้การจัดส่ง ASYNC ฉันกำลังอ่านว่าฉันสามารถใช้dispatch_syncกับคิวพร้อมกันเพื่อดำเนินการบล็อกทีละรายการ ในกรณีนี้ทำไมจึงมีคิวแบบอนุกรมเนื่องจากฉันสามารถใช้คิวพร้อมกันได้ตลอดเวลาซึ่งฉันสามารถส่ง SYNCHRONOUSLY บล็อกได้มากเท่าที่ฉันต้องการ ขอบคุณสำหรับคำอธิบายที่ดี!

6
AtomicInteger lazySet กับ set
อะไรคือความแตกต่างระหว่างlazySetและsetวิธีการAtomicInteger? เอกสารไม่ได้มีมากที่จะพูดเกี่ยวกับlazySet: ในที่สุดก็ตั้งค่าเป็นค่าที่กำหนด ดูเหมือนว่าค่าที่จัดเก็บไว้จะไม่ถูกตั้งค่าเป็นค่าที่ต้องการในทันที แต่จะถูกกำหนดให้ตั้งเวลาในอนาคตแทน แต่การใช้วิธีนี้ในทางปฏิบัติคืออะไร? ตัวอย่างใด
116 java  concurrency  atomic 

4
ความแตกต่างระหว่าง DispatchQueue.main.async และ DispatchQueue.main.sync
ฉันใช้DispatchQueue.main.asyncมานานเพื่อดำเนินการที่เกี่ยวข้องกับ UI Swift จัดเตรียมทั้งDispatchQueue.main.asyncและและDispatchQueue.main.syncและทั้งสองอย่างจะดำเนินการในคิวหลัก ใครช่วยบอกความแตกต่างระหว่างพวกเขาได้ไหม ฉันควรใช้แต่ละครั้งเมื่อใด DispatchQueue.main.async { self.imageView.image = imageView self.lbltitle.text = "" } DispatchQueue.main.sync { self.imageView.image = imageView self.lbltitle.text = "" }


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

7
ข้อใดจะดีกว่าสำหรับงานพร้อมกันบน node.js เส้นใย? คนทำงานเว็บ? หรือเธรด?
ฉันสะดุดกับ node.js เมื่อหลายปีก่อนและชอบมันมาก แต่ในไม่ช้าฉันก็พบว่ามันขาดความสามารถในการทำงานที่ต้องใช้ CPU มาก ดังนั้นฉันจึงเริ่ม googling และได้รับคำตอบเหล่านี้เพื่อแก้ปัญหา: Fibers, Webworkers และ Threads (thread-a-gogo) ตอนนี้จะใช้อันไหนเป็นความสับสนและหนึ่งในนั้นจำเป็นต้องใช้อย่างแน่นอน - จุดประสงค์ของการมีเซิร์ฟเวอร์ที่ IO ดีแค่ไหนและไม่มีอย่างอื่น? คำแนะนำที่จำเป็น! อัพเดท: ฉันกำลังคิดหาวิธีที่ไม่สาย เพียงแค่ต้องการคำแนะนำมากกว่านั้น ตอนนี้สิ่งที่ฉันคิดคือ: มามีเธรดกันเถอะ (ใช้ thread_a_gogo หรืออาจจะเป็นเว็บเวิร์ค) ตอนนี้เมื่อเราต้องการมากขึ้นเราสามารถสร้างเพิ่มเติมได้ แต่จะมีข้อ จำกัด บางประการเกี่ยวกับกระบวนการสร้าง (ไม่ได้บอกเป็นนัยโดยระบบ แต่อาจเป็นเพราะค่าใช้จ่าย) ตอนนี้เมื่อเราเกินขีด จำกัด เราสามารถแยกโหนดใหม่และเริ่มสร้างเธรดทับได้ ด้วยวิธีนี้มันสามารถดำเนินต่อไปได้จนกว่าเราจะถึงขีด จำกัด (ในที่สุดกระบวนการก็มีค่าใช้จ่ายสูงเช่นกัน) เมื่อถึงขีด จำกัด นี้เราจะเริ่มจัดคิวงาน เมื่อใดก็ตามที่เธรดว่างจะมีการมอบหมายงานใหม่ วิธีนี้จะดำเนินต่อไปได้อย่างราบรื่น นั่นคือสิ่งที่ฉันคิด ความคิดนี้ดีหรือไม่? ฉันยังใหม่กับกระบวนการและเธรดทั้งหมดนี้ดังนั้นจึงไม่มีความเชี่ยวชาญใด ๆ กรุณาแบ่งปันความคิดเห็นของคุณ …

4
สารระเหยมีราคาแพงหรือไม่?
หลังจากอ่านตำรา JSR-133 สำหรับนักเขียนคอมไพเลอร์เกี่ยวกับการใช้สารระเหยโดยเฉพาะส่วน "การโต้ตอบกับคำแนะนำเกี่ยวกับอะตอม" ฉันคิดว่าการอ่านตัวแปรระเหยโดยไม่ต้องอัปเดตจำเป็นต้องมี LoadLoad หรือ LoadStore barrier ถัดไปในหน้าฉันเห็นว่า LoadLoad และ LoadStore นั้นไม่มีประสิทธิภาพบนซีพียู X86 นี่หมายความว่าการดำเนินการอ่านแบบระเหยสามารถทำได้โดยไม่ต้องมีการยกเลิกแคชอย่างชัดเจนบน x86 และเร็วเท่ากับการอ่านตัวแปรปกติ (โดยไม่คำนึงถึงข้อ จำกัด ในการจัดลำดับใหม่ของการระเหย)? ฉันเชื่อว่าฉันเข้าใจสิ่งนี้ไม่ถูกต้อง มีใครสนใจที่จะสอนฉันได้ไหม แก้ไข: ฉันสงสัยว่ามีความแตกต่างในสภาพแวดล้อมแบบมัลติโปรเซสเซอร์หรือไม่ ในระบบ CPU เดียว CPU อาจมองว่าเป็นเธรดแคชของตัวเองตามที่สถานะของ John V. แต่ในระบบ CPU หลายระบบจะต้องมีตัวเลือกการกำหนดค่าบางอย่างให้กับ CPU ซึ่งไม่เพียงพอและหน่วยความจำหลักจะต้องถูกกระทบทำให้ระเหยช้าลง ในระบบ multi cpu ใช่ไหม? PS: ระหว่างทางเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ฉันสะดุดเกี่ยวกับบทความดีๆต่อไปนี้และเนื่องจากคำถามนี้อาจน่าสนใจสำหรับคนอื่นฉันจะแชร์ลิงก์ของฉันที่นี่: ทฤษฎีและการปฏิบัติ Java: การแก้ไข Java Memory Model ตอนที่ …



17
วิธีการบล็อกวิธีการ submit () ของ ThreadPoolExecutor ถ้ามันอิ่มตัว?
ฉันต้องการสร้างสิ่งThreadPoolExecutorนั้นเมื่อถึงขนาดสูงสุดและคิวเต็มsubmit()เมธอดจะบล็อกเมื่อพยายามเพิ่มงานใหม่ ฉันจำเป็นต้องใช้งานแบบกำหนดเองRejectedExecutionHandlerสำหรับสิ่งนั้นหรือมีวิธีที่มีอยู่ในการดำเนินการนี้โดยใช้ไลบรารี Java มาตรฐานหรือไม่

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