Questions tagged «concurrency»

在计算机科学中,并发是系统的属性,其中可以在重叠的时间段内执行多个计算。这些计算可以在同一芯片的多个内核上执行,也可以在同一处理器上抢占时间共享线程,或者在物理上分开的处理器上执行。

2
对UPDLOCK,HOLDLOCK感到困惑
在研究表提示的使用时,我遇到了两个问题: 我应该使用哪些锁定提示(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, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] 从SSMS窗口1: BEGIN TRANSACTION SELECT …


9
Node.js或Erlang
当涉及到它可以处理的并发级别时,我真的很喜欢这些工具。 Erlang / OTP看起来更稳定,但是需要更多的学习,并且需要深入研究功能语言范例。看起来,Erlang / OTP在多核CPU方面做得更好(如果我错了,请纠正我)。 但是我应该选择哪个呢?从短期和长期角度看,哪一个更好? 我的目标是学习一种工具,该工具比传统语言更容易在高负载下扩展Web项目。

13
编写一个肯定会陷入僵局的程序[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 改善这个问题 我最近在一次采访中提出了这个问题。 我回答说,如果交织出错,就会发生死锁,但是访调员坚持认为,可以编写一个无论交织而总是陷入死锁的程序。 我们可以编写这样的程序吗?您能指出我这样的示例程序吗?

8
如何等待几个期货?
假设我有几个期货,需要等到其中任何一个失败或全部成功。 例如:让我们有3个期货:f1,f2,f3。 如果f1成功f2失败,我就不会等待f3(并将失败返回给客户端)。 如果f2在运行期间失败f1并且f3仍在运行,则不要等待它们(并返回failure) 如果f1成功,然后f2成功,我继续等待f3。 您将如何实施?

2
runtime.Gosched到底做什么?
在Tour of Go网站的go 1.5发行之前的版本中,有一段代码看起来像这样。 package main import ( "fmt" "runtime" ) func say(s string) { for i := 0; i < 5; i++ { runtime.Gosched() fmt.Println(s) } } func main() { go say("world") say("hello") } 输出如下: hello world hello world hello world hello world hello 令我困扰的是,runtime.Gosched()将其删除后,该程序不再显示“世界”。 hello hello hello hello …
85 concurrency  go 


5
并发字典正确用法
我认为这是正确使用并发字典的意思吗? private ConcurrentDictionary<int,long> myDic = new ConcurrentDictionary<int,long>(); //Main thread at program startup for(int i = 0; i < 4; i++) { myDic.Add(i, 0); } //Seperate threads use this to update a value myDic[InputID] = newLongValue; 我没有锁等,并且即使多个线程可能试图执行相同操作,也只是在更新字典中的值。


6
如何中断在take()上阻塞的BlockingQueue?
我有一个类,该类从a获取对象BlockingQueue并通过take()连续循环调用来处理它们。在某些时候,我知道不会再有其他对象添加到队列中。如何中断该take()方法以使其停止阻塞? 这是处理对象的类: public class MyObjHandler implements Runnable { private final BlockingQueue<MyObj> queue; public class MyObjHandler(BlockingQueue queue) { this.queue = queue; } public void run() { try { while (true) { MyObj obj = queue.take(); // process obj here // ... } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } } …

5
使用Python多处理解决令人尴尬的并行问题
如何使用多重处理来解决令人尴尬的并行问题? 令人尴尬的并行问题通常包括三个基本部分: 读取输入数据(从文件,数据库,tcp连接等)。 在输入数据上运行计算,其中每个计算独立于任何其他计算。 将计算结果写入文件,数据库,TCP连接等。 我们可以在两个方面并行化程序: 第2部分可以在多个内核上运行,因为每个计算都是独立的。处理顺序无关紧要。 每个部分可以独立运行。第1部分可以将数据放在输入队列中,第2部分可以将数据从输入队列中拉出并将结果放到输出队列中,第3部分可以将结果从输出队列中拉出并写出。 这似乎是并发编程中最基本的模式,但是我仍然在尝试解决它方面迷失了方向,因此让我们写一个规范的示例来说明如何使用多重处理来完成。 这是示例问题:给定一个以整数行作为输入的CSV文件,计算其总和。将问题分为三个部分,这些部分可以并行运行: 将输入文件处理为原始数据(整数列表/可迭代数) 并行计算数据总和 输出总和 下面是传统的单进程绑定Python程序,它解决了这三个任务: #!/usr/bin/env python # -*- coding: UTF-8 -*- # basicsums.py """A program that reads integer values from a CSV file and writes out their sums to another CSV file. """ import csv import optparse import sys def …

7
Java:ExecutorService在特定队列大小后会在提交时阻止
我正在尝试编写一个解决方案,其中单个线程会产生可并行执行的I / O密集型任务。每个任务都有重要的内存数据。因此,我希望能够限制当前待处理的任务数。 如果我这样创建ThreadPoolExecutor: ThreadPoolExecutor executor = new ThreadPoolExecutor(numWorkerThreads, numWorkerThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(maxQueue)); 然后,当队列已满并且所有线程都已经繁忙时,executor.submit(callable)抛出该异常RejectedExecutionException。 executor.submit(callable)当队列已满并且所有线程都忙时,我该怎么做才能阻塞? 编辑:我试过了: executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); 它以某种微妙的方式达到了我想要达到的效果(基本上被拒绝的线程在调用线程中运行,因此这阻止了调用线程提交更多信息)。 编辑:(问了问题5年后) 对于阅读此问题及其答案的任何人,请勿将接受的答案作为一种正确的解决方案。请通读所有答案和评论。

2
为什么Kotlin中没有并发关键字?
为什么没有用于同步/并发的关键字? 到目前为止,我的研究为我提供了一种解决方案,您包装了一些高级类并使用它们来处理并发。 给定一个纯Kotlin项目,如果需要一个小型的高度优化的组件来处理并发等,该怎么办? 我的印象是Kotlin是Java的辅助语言,可以用Kotlin编写90%的代码,但有一些Java代码无法用Kotlin表示。 这是正确的吗?这是原来的样子吗?



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.