并发收集支持删除指定项吗?

2024-02-09

非常简单:除了 ConcurrentDictionary (如果必须的话我会使用它,但这不是真正正确的概念),是否有任何并发​​集合(IPrducerConsumer 实现)支持基于项目或谓词的简单相等性删除特定项目定义删除条件?

说明:我有一个多线程、多阶段工作流算法,它从数据库中提取对象并将它们放入“启动”队列中。从那里,它们被下一阶段抓取,进一步处理,并塞入其他队列。这个过程还要经历几个阶段。同时,第一阶段由其主管再次调用,并将对象从数据库中提取出来,这些对象可以包括仍在处理中的对象(因为它们尚未完成处理,因此尚未重新保留标记集:他们完成了)。

我正在设计的解决方案是一个“工作中”的大师系列;当第一阶段检索对象进行处理时,对象会进入该队列,并在工作流的任何阶段完成必要的处理后将其重新保存到数据库中作为“已处理”后删除。当该对象位于该列表中时,如果第一阶段重新检索该对象,它将被忽略。

我本来计划使用 ConcurrentBag,但唯一的删除方法 (TryTake) 会从包中删除任意项目,而不是指定的项目(ConcurrentBag 是slow在.NET 4)中。 ConcurrentQueue 和 ConcurrentStack 也不允许删除除下一个项目之外的其他项目,留下 ConcurrentDictionary,它可以工作,但超出了我的需要(我真正需要的是存储正在处理的记录的 Id;它们在工作流程中不会改变)。


之所以没有这样的数据结构是因为所有集合的查找操作时间为O(n)。这些都是IndexOf, Remove(element)等等。他们都枚举所有元素并检查它们是否相等。

只有哈希表的查找时间为 O(1)。在并发场景中,O(n) 查找时间将导致集合的锁定时间很长。其他线程在此期间将无法添加元素。

在字典中,只有被哈希命中的单元格才会被锁定。当一个线程通过散列单元中的元素检查相等性时,其他线程可以继续添加。

我的建议是继续使用 ConcurrentDictionary。


顺便说一句,您是对的,ConcurrentDictionary 对于您的解决方案来说有点过大。您真正需要的是快速检查对象是否正在工作。 AHashSet将是一个完美的选择。那么它基本上什么也不做Add(element), Contains(element), Remove(element)。有一个ConcurrentHeshSet在java中的实现。对于 c# 我发现了这个:如何在.Net中实现ConcurrentHashSet https://stackoverflow.com/questions/4306936/how-to-implement-concurrenthashset-in-net不知道有多好。

作为第一步,我仍然会编写一个包装器HashSet接口周围ConcurrentDictionary启动并运行它,然后尝试不同的实现并查看性能差异。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

并发收集支持删除指定项吗? 的相关文章

  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • 如何将 protobuf-net 与不可变值类型一起使用?

    假设我有一个像这样的不可变值类型 Serializable DataContract public struct MyValueType ISerializable private readonly int x private readon
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没

随机推荐

  • 使用亚马逊 s3,使用他们的服务器上传文件,但 URL 应该显示来自我的

    是否可以使用他们的服务器将文件上传到亚马逊S3 即我的服务器不应在上传过程中使用 我还希望 URL 显示为正在上传到我的服务器 这可能吗 Look here http docs amazonwebservices com AmazonS3
  • jQuery 图像缩放,悬停时显示详细信息

    我正在寻找一个 jQuery 插件 它可以缩放缩略图并显示有关图像的一些详细信息 或多或少与谷歌图像搜索相同 我发现了http www malsup com jquery hoverpulse http www malsup com jqu
  • babel-loader:模块构建失败:语法错误:在严格模式下删除局部变量

    我在用着babel loader in webpack使用自定义 babel plugin 将一些第三方代码转换为可以顺利通过 Webpack 捆绑器的格式 然而 当我的代码通过 babel 的解析器 babylon 运行来构建 AST 时
  • Docker 和设置 JVM 参数

    我需要在 Docker 容器中使用此类 JVM 选项运行 Java 应用程序 但我不知道在哪里可以设置它 我尝试使用 java Dcom 命令 但它不起作用 做这个的最好方式是什么 Dcom sun management jmxremote
  • 如何制作CRF++的模板文件?

    我是 CRF 的新手 我正在自学查看其手册 http crfpp googlecode com svn trunk doc index html source navbar templ http crfpp googlecode com s
  • Android 3.0 Canary 中未显示预览

    我已经开始使用最新的 Android Studio 3 0 但预览版遇到问题 它没有在预览选项卡中显示预览 这是我所做的
  • RuntimeError:线程“Dummy-1”中没有当前事件循环

    我正在开发一个带有 Python 后端和 Django 服务器的 Web 应用程序 我有一些树莓派 它们正在将数据发送到服务器 然后我应该从后端获取这些数据 我成功地在我的项目中做到了这一点 所以我对代码非常确定 现在我想将此功能集成到我的
  • WebSocket JS 的自定义标头

    我找到了一个简单的解决方案 使用 WebSocket 和基于 PHP 作为后端 js vuejs 作为前端的 Web 应用程序的自定义标头 我的应用程序应该连接到基于 Java 的 WebSocket 服务器以获取实时统计数据 受 Oaut
  • 如何默认在所有路由上将查询参数保留在角度5中?

    背景 用户使用参数调用应用程序的 url 并使用我的应用程序 在不同路由之间切换时 url 参数应在浏览器地址栏中保持可见 我必须在应用程序的每条路线上保留查询参数 这意味着如果我有网址 www example com app test i
  • 没有 App_Code 的 ASP.Net WCF 服务

    我想创建一个 WCF 服务 用于我的 ASP Net 网站 不是项目 该网站没有代码隐藏文件 这是传统 asmx 样式服务的一个选项 但没有appear用于 wcf 服务 或者将其代码存储在单独的代码项目中 并且仅由 svc 文件公开 我尝
  • 当违反测试超时时,NUnit 内部会做什么?

    当 NUnit 遇到超时时到底会做什么 我曾经认为它会通过抛出 TimeoutException 来中止测试 但这个测试证明并非如此 Test Timeout 100 ExpectedException typeof TimeoutExce
  • DELETE 请求出现巨大延迟,响应为 204,且 Objective-C 中没有内容

    我在使用 iOS 应用程序 我不是 iOS 开发人员 我负责该应用程序使用的 API 和删除请求时遇到问题 Api 使用没有 DELETE 请求内容的 204 响应 到目前为止 该响应对于所有客户端应用程序都运行良好 没有任何问题 问题是
  • tcl深度递归文件搜索,搜索带有*.c扩展名的文件

    使用旧答案在 tcl 中搜索文件 https stackoverflow com a 435094 984975 https stackoverflow com a 435094 984975 首先我们来讨论一下我现在在做什么 使用此功能
  • 查找分配给主驱动器的字母

    我正在尝试找到一个类似的函数Environ查找我的业务中的主驱动器已映射到特定 PC 上的哪个驱动器 使用文件路径 G Eworking SET Operations file 我知道我的电脑已被映射 因此该文件路径位于 G 驱动器内 但其
  • 如何从oracle的日期字段获取日期01-01-9999的时间(以毫秒为单位)

    我想从 oracle 的日期字段获取日期 01 01 9999 的毫秒数 我创建了下面的块来实现相同的目的 set serveroutput on declare base point constant timestamp to times
  • 创建接受任意数量的 void functor 的可变参数函数

    受到我上一个问题的启发 制作可变参数函数 它接受任意函子并返回输入函子的每个返回值的元组 https stackoverflow com questions 15059250 make variadic function which tak
  • 使用 iOS Storyboard 动态调整 UILabel 的高度

    我有一个标签 它是使用 iOS Storyboard 布局创建的 然而 标签的内容是动态的并且可以在运行时改变 如何确保标签的高度根据标签中的内容进行调整 I tried 将行数设置为 0 Setting Editor gt Size to
  • 更改Linux上的线程名称(htop)

    我有一个多线程应用程序 我希望 htop 作为示例 为每个运行的线程显示不同的名称 目前它显示的是用于运行主程序的 命令行 我尝试过使用 prctl PR SET NAME 但它仅适用于 top 并且该调用只能指定最多 16 个字节的名称
  • 烦恼 - 如何禁用 Eclipse 类路径条目警告

    我已经搜索了选项 但似乎找不到禁用这些警告的方法 诸如此类的警告 Classpath entry org eclipse jdt junit JUNIT CONTAINER 4 will not be exported or publish
  • 并发收集支持删除指定项吗?

    非常简单 除了 ConcurrentDictionary 如果必须的话我会使用它 但这不是真正正确的概念 是否有任何并发 集合 IPrducerConsumer 实现 支持基于项目或谓词的简单相等性删除特定项目定义删除条件 说明 我有一个多