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

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

6
การเลือกรายการการทำงานพร้อมกันที่ดีที่สุดใน Java [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบได้ด้วยข้อเท็จจริงและการอ้างอิงโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ เธรดพูลของฉันมีจำนวนเธรดคงที่ เธรดเหล่านี้จำเป็นต้องเขียนและอ่านจากรายการที่แชร์บ่อยๆ ดังนั้นโครงสร้างข้อมูลใด (ควรเป็นรายการที่ดีกว่าต้องไม่มีการมอนิเตอร์) ในjava.util.concurrentแพ็คเกจจึงดีที่สุด
101 java  concurrency 

9
เหตุใด i ++ จึงไม่ใช่ปรมาณู
เหตุใดi++อะตอมจึงไม่อยู่ใน Java เพื่อให้ลึกลงไปอีกนิดใน Java ฉันพยายามนับความถี่ในการดำเนินการลูปในเธรด ดังนั้นฉันจึงใช้ไฟล์ private static int total = 0; ในคลาสหลัก ฉันมีสองกระทู้ หัวข้อ 1: พิมพ์ System.out.println("Hello from Thread 1!"); หัวข้อ 2: พิมพ์ System.out.println("Hello from Thread 2!"); และฉันนับบรรทัดที่พิมพ์ด้วยเธรด 1 และเธรด 2 แต่บรรทัดของเธรด 1 + บรรทัดของเธรด 2 ไม่ตรงกับจำนวนบรรทัดทั้งหมดที่พิมพ์ออกมา นี่คือรหัสของฉัน: import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.logging.Level; import java.util.logging.Logger; public class Test …

10
ฉันจะเรียกวิธีการบล็อกบางอย่างด้วยการหมดเวลาใน Java ได้อย่างไร
มีวิธีที่ดีมาตรฐานในการเรียกใช้วิธีการบล็อกด้วยการหมดเวลาใน Java หรือไม่? ฉันต้องการที่จะทำได้: // call something.blockingMethod(); // if it hasn't come back within 2 seconds, forget it ถ้ามันสมเหตุสมผล ขอบคุณ.
97 java  concurrency 

6
วิธีใช้ ConcurrentLinkedQueue
ฉันจะใช้ a ConcurrentLinkedQueueใน Java ได้อย่างไร เมื่อใช้สิ่งนี้LinkedQueueฉันต้องกังวลเกี่ยวกับการทำงานพร้อมกันในคิวหรือไม่ หรือฉันต้องกำหนดสองวิธี (วิธีหนึ่งเพื่อดึงองค์ประกอบจากรายการและอีกวิธีหนึ่งเพื่อเพิ่มองค์ประกอบในรายการ) หมายเหตุ: ต้องมีการซิงโครไนซ์สองวิธีนี้อย่างชัดเจน ขวา? แก้ไข:สิ่งที่ฉันพยายามทำคือ: ฉันมีคลาส (ใน Java) ที่มีวิธีการหนึ่งในการดึงข้อมูลจากคิวและอีกคลาสหนึ่งด้วยวิธีการหนึ่งในการเพิ่มไอเท็มลงในคิว รายการที่เพิ่มและดึงมาจากรายการเป็นวัตถุของคลาสของฉันเอง อีกคำถามหนึ่ง: ฉันต้องทำสิ่งนี้ในวิธีลบ: while (queue.size() == 0){ wait(); queue.poll(); } ฉันมีผู้บริโภคเพียงรายเดียวและผู้ผลิตรายเดียว
97 java  concurrency 

7
สัญญาณ - การใช้การนับเริ่มต้นคืออะไร?
http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx ในการสร้างเซมาฟอร์ฉันต้องระบุจำนวนเริ่มต้นและจำนวนสูงสุด MSDN ระบุว่าการนับเริ่มต้นคือ - จำนวนคำขอเริ่มต้นสำหรับเซมาฟอร์ที่สามารถให้ได้พร้อมกัน แม้ว่าจะระบุว่าจำนวนสูงสุดคือ จำนวนคำขอสูงสุดสำหรับเซมาฟอร์ที่สามารถให้ได้พร้อมกัน ฉันเข้าใจว่าจำนวนสูงสุดคือจำนวนเธรดสูงสุดที่สามารถเข้าถึงทรัพยากรพร้อมกันได้ แต่การใช้การนับเริ่มต้นคืออะไร? ถ้าฉันสร้างเซมาฟอร์โดยมีจำนวนเริ่มต้นเป็น 0 และจำนวนสูงสุดเป็น 2 เธรดพูลเธรดของฉันจะไม่สามารถเข้าถึงทรัพยากรได้ ถ้าฉันตั้งค่าการนับเริ่มต้นเป็น 1 และจำนวนสูงสุดเป็น 2 เธรดพูลเธรดเท่านั้นที่สามารถเข้าถึงทรัพยากรได้ เฉพาะเมื่อฉันตั้งค่าการนับเริ่มต้นและจำนวนสูงสุดเป็น 2 เธรด 2 เธรดเท่านั้นที่สามารถเข้าถึงทรัพยากรได้พร้อมกัน ดังนั้นฉันจึงสับสนจริงๆเกี่ยวกับความสำคัญของการนับเริ่มต้น? SemaphoreSlim semaphoreSlim = new SemaphoreSlim(0, 2); //all threadpool threads wait SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1, 2);//only one thread has access to the resource at …

9
ExecutorService ที่ขัดขวางงานหลังจากหมดเวลา
ฉันกำลังมองหาการใช้งานExecutorServiceที่สามารถกำหนดระยะหมดเวลาได้ งานที่ส่งไปยัง ExecutorService ถูกขัดจังหวะหากใช้เวลานานกว่าการหมดเวลาในการรัน การใช้สัตว์ร้ายเช่นนี้ไม่ใช่เรื่องยาก แต่ฉันสงสัยว่าจะมีใครรู้ถึงการใช้งานที่มีอยู่หรือไม่ นี่คือสิ่งที่ฉันคิดขึ้นจากการสนทนาด้านล่าง มีคำแนะนำอะไรมั้ย? import java.util.List; import java.util.concurrent.*; public class TimeoutThreadPoolExecutor extends ThreadPoolExecutor { private final long timeout; private final TimeUnit timeoutUnit; private final ScheduledExecutorService timeoutExecutor = Executors.newSingleThreadScheduledExecutor(); private final ConcurrentMap<Runnable, ScheduledFuture> runningTasks = new ConcurrentHashMap<Runnable, ScheduledFuture>(); public TimeoutThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, …

7
ตัวแปรคงที่ใช้ร่วมกันระหว่างเธรดหรือไม่
ครูของฉันในคลาส Java ระดับสูงเกี่ยวกับเธรดพูดบางอย่างที่ฉันไม่แน่ใจ เขาระบุว่าโค้ดต่อไปนี้ไม่จำเป็นต้องอัพเดตreadyตัวแปร ตามที่เขาพูดทั้งสองเธรดไม่จำเป็นต้องแชร์ตัวแปรคงที่โดยเฉพาะในกรณีที่แต่ละเธรด (เธรดหลักเทียบกับReaderThread) กำลังทำงานบนโปรเซสเซอร์ของตัวเองดังนั้นจึงไม่แชร์รีจิสเตอร์ / แคช / ฯลฯ เดียวกันและซีพียูตัวเดียว จะไม่อัปเดตอื่น ๆ โดยพื้นฐานแล้วเขากล่าวว่าเป็นไปได้ที่readyจะมีการอัปเดตในเธรดหลัก แต่ไม่ใช่ในเธรดReaderThreadดังนั้นสิ่งนั้นReaderThreadจะวนซ้ำไปเรื่อย ๆ นอกจากนี้เขายังอ้างว่าเป็นไปได้ที่โปรแกรมจะพิมพ์0หรือ42. ผมเข้าใจว่า42อาจจะมีการพิมพ์ 0แต่ไม่ เขากล่าวถึงกรณีนี้เมื่อnumberตัวแปรถูกตั้งค่าเป็นค่าเริ่มต้น ฉันคิดว่าบางทีไม่สามารถรับประกันได้ว่าตัวแปรคงที่ถูกอัพเดตระหว่างเธรด แต่สิ่งนี้ทำให้ฉันแปลกมากสำหรับ Java การreadyระเหยสามารถแก้ไขปัญหานี้ได้หรือไม่? เขาแสดงรหัสนี้: public class NoVisibility { private static boolean ready; private static int number; private static class ReaderThread extends Thread { public void run() { while …

6
CountDownLatch กับ Semaphore
มีประโยชน์จากการใช้ java.util.concurrent.CountdownLatch แทน java.util.concurrent.Semaphore ? เท่าที่ฉันสามารถบอกได้ว่าชิ้นส่วนต่อไปนี้เกือบจะเทียบเท่า: 1. สัญญาณ final Semaphore sem = new Semaphore(0); for (int i = 0; i < num_threads; ++ i) { Thread t = new Thread() { public void run() { try { doStuff(); } finally { sem.release(); } } }; t.start(); } sem.acquire(num_threads); 2: CountDownLatch …

6
มี ExecutorService ที่ใช้เธรดปัจจุบันหรือไม่
สิ่งที่ฉันหลังจากเป็นวิธีที่เข้ากันได้ในการกำหนดค่าการใช้เธรดพูลหรือไม่ ตามหลักการแล้วส่วนที่เหลือของโค้ดไม่ควรได้รับผลกระทบเลย ฉันสามารถใช้เธรดพูลที่มีเธรด 1 เธรด แต่นั่นไม่ใช่สิ่งที่ฉันต้องการ ความคิดใด ๆ ? ExecutorService es = threads == 0 ? new CurrentThreadExecutor() : Executors.newThreadPoolExecutor(threads); // es.execute / es.submit / new ExecutorCompletionService(es) etc
94 java  concurrency 

1
กรณีการใช้งานของ scala.concurrent.Promise คืออะไร?
ฉันกำลังอ่านSIP-14และแนวคิดเรื่องFutureความสมเหตุสมผลและเข้าใจง่าย แต่มีคำถามสองข้อเกี่ยวกับPromise: SIP Depending on the implementation, it may be the case that p.future == pที่กล่าวว่า เป็นเช่นนี้ได้อย่างไร? มีFutureและPromiseไม่ได้ทั้งสองประเภทที่แตกต่างกัน? เราควรใช้ a Promise? producer and consumerรหัสตัวอย่าง: import scala.concurrent.{ future, promise } val p = promise[T] val f = p.future val producer = future { val r = produceSomething() p success r continueDoingSomethingUnrelated() …

3
จะรู้ได้อย่างไรว่าอะไรไม่ปลอดภัยในทับทิม?
เริ่มต้นจาก Rails 4ทุกอย่างจะต้องทำงานในสภาพแวดล้อมแบบเธรดโดยค่าเริ่มต้น ความหมายนี้คือโค้ดทั้งหมดที่เราเขียนและ อัญมณีทั้งหมดที่เราใช้จะต้องเป็นthreadsafe ดังนั้นฉันมีคำถามสองสามข้อเกี่ยวกับเรื่องนี้: อะไรที่ไม่ปลอดภัยต่อเกลียวในทับทิม / ราง? Vsอะไรคือความปลอดภัยของเกลียวในทับทิม / ราง? มีรายการของอัญมณีที่เป็นที่รู้จักกันเป็นด้ายหรือในทางกลับกัน? มีรายการรูปแบบทั่วไปของรหัสที่ไม่ใช่ตัวอย่างที่ปลอดภัย@result ||= some_methodหรือไม่ โครงสร้างข้อมูลใน Ruby lang core เช่นHashetc threadsafe หรือไม่? ใน MRI ซึ่งมีGVL/GILซึ่งหมายความว่าเธรดทับทิมเพียง 1 เส้นเท่านั้นที่สามารถทำงานได้ในแต่ละครั้งยกเว้นIOเธรดที่ปลอดภัยมีผลต่อเราหรือไม่?

4
"การแข่งขันข้อมูล" และ "สภาพการแข่งขัน" เป็นสิ่งเดียวกันในบริบทของการเขียนโปรแกรมพร้อมกัน
ฉันมักจะพบว่ามีการใช้คำเหล่านี้ในบริบทของการเขียนโปรแกรมพร้อมกัน เหมือนกันหรือต่างกัน?

8
ทำไมภาษาที่ใช้งานได้ (โดยเฉพาะ Erlang) จึงปรับขนาดได้ดี?
ฉันเฝ้าดูการมองเห็นที่เพิ่มขึ้นของภาษาการเขียนโปรแกรมที่ใช้งานได้และคุณสมบัติมาระยะหนึ่งแล้ว ฉันตรวจสอบพวกเขาและไม่เห็นเหตุผลของการอุทธรณ์ จากนั้นเมื่อเร็ว ๆ นี้ผมได้เข้าร่วมเควินสมิ ธ "พื้นฐานของ Erlang" นำเสนอต่อที่Codemash ฉันสนุกกับการนำเสนอและได้เรียนรู้ว่าคุณลักษณะมากมายของการเขียนโปรแกรมเชิงฟังก์ชันช่วยให้หลีกเลี่ยงปัญหาเธรด / การทำงานพร้อมกันได้ง่ายขึ้นมาก ฉันเข้าใจว่าการขาดสถานะและความไม่แน่นอนทำให้หลายเธรดเปลี่ยนแปลงข้อมูลเดียวกันไม่ได้ แต่เควินกล่าวว่า (ถ้าฉันเข้าใจถูกต้อง) การสื่อสารทั้งหมดเกิดขึ้นผ่านข้อความและข้อความจะถูกประมวลผลพร้อมกัน (อีกครั้งเพื่อหลีกเลี่ยงปัญหาการเกิดพร้อมกัน) แต่ฉันได้อ่านพบว่า Erlang ใช้ในแอปพลิเคชันที่ปรับขนาดได้สูง (เหตุผลทั้งหมดที่ Ericsson สร้างขึ้นตั้งแต่แรก) จะมีประสิทธิภาพในการจัดการคำขอหลายพันรายการต่อวินาทีได้อย่างไรหากจัดการทุกอย่างเป็นข้อความที่ประมวลผลแบบซิงโครนัส นั่นไม่ใช่เหตุผลที่เราเริ่มก้าวไปสู่การประมวลผลแบบอะซิงโครนัสดังนั้นเราจึงสามารถใช้ประโยชน์จากการรันเธรดการดำเนินการหลายชุดพร้อมกันและบรรลุความสามารถในการปรับขนาด ดูเหมือนว่าสถาปัตยกรรมนี้จะปลอดภัยกว่า แต่เป็นการถอยหลังในแง่ของความสามารถในการปรับขนาดได้ ฉันขาดอะไรไป? ฉันเข้าใจว่าผู้สร้าง Erlang ตั้งใจที่จะหลีกเลี่ยงการสนับสนุนเธรดเพื่อหลีกเลี่ยงปัญหาการทำงานพร้อมกัน แต่ฉันคิดว่าการทำงานแบบมัลติเธรดเป็นสิ่งที่จำเป็นเพื่อให้สามารถปรับขนาดได้ ภาษาโปรแกรมที่ใช้งานได้จะปลอดภัยต่อเธรดโดยเนื้อแท้ได้อย่างไร แต่ก็ยังคงปรับขนาดได้

2
สับสนเกี่ยวกับ UPDLOCK, HOLDLOCK
ในขณะที่ค้นคว้าการใช้Table Hintsฉันเจอคำถามสองข้อนี้: ฉันควรใช้คำแนะนำการล็อกใด (T-SQL) HOLDLOCK มีผลอย่างไรต่อ UPDLOCK? คำตอบของทั้งสองคำถามบอกว่าเมื่อใช้(UPDLOCK, HOLDLOCK)กระบวนการอื่น ๆ จะไม่สามารถอ่านข้อมูลบนตารางนั้นได้ แต่ฉันไม่เห็นสิ่งนี้ ในการทดสอบฉันสร้างตารางและเริ่มหน้าต่าง SSMS สองหน้าต่าง จากหน้าต่างแรกฉันรันธุรกรรมที่เลือกจากตารางโดยใช้คำแนะนำตารางต่างๆ ในขณะที่ธุรกรรมกำลังทำงานอยู่จากหน้าต่างที่สองฉันเรียกใช้คำสั่งต่างๆเพื่อดูว่ารายการใดจะถูกบล็อก ตารางทดสอบ: CREATE TABLE [dbo].[Test]( [ID] [int] IDENTITY(1,1) NOT NULL, [Value] [nvarchar](50) NULL, CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, …

9
การซิงโครไนซ์การเข้าถึง SimpleDateFormat
javadoc สำหรับ SimpleDateFormat ระบุว่า SimpleDateFormat ไม่ซิงโครไนซ์ "รูปแบบวันที่ไม่ซิงโครไนซ์ขอแนะนำให้สร้างอินสแตนซ์รูปแบบแยกกันสำหรับแต่ละเธรดหากเธรดหลายชุดเข้าถึงรูปแบบพร้อมกันจะต้องซิงโครไนซ์กับภายนอก" แต่อะไรคือแนวทางที่ดีที่สุดในการใช้อินสแตนซ์ของ SimpleDateFormat ในสภาพแวดล้อมแบบมัลติเธรด นี่คือตัวเลือกบางตัวที่ฉันคิดไว้ฉันเคยใช้ตัวเลือก 1 และ 2 ในอดีต แต่ฉันอยากรู้ว่ามีทางเลือกอื่นที่ดีกว่าหรือไม่หรือตัวเลือกใดที่จะให้ประสิทธิภาพและการทำงานพร้อมกันที่ดีที่สุด ตัวเลือกที่ 1: สร้างอินสแตนซ์ในเครื่องเมื่อจำเป็น public String formatDate(Date d) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(d); } ตัวเลือกที่ 2: สร้างอินสแตนซ์ของ SimpleDateFormat เป็นตัวแปรคลาส แต่ซิงโครไนซ์การเข้าถึง private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); public String formatDate(Date d) { synchronized(sdf) …

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