LockFreeHashMap:无阻塞代码技巧 (ifeve.com)

【简介】

10年前,cliff click博士就为关联数据结构ConcurrentHashMap给出了一个采用open Address的无阻塞实现(NonBlockingHashMap)。其中为了减少线程之间执行顺序的依赖而采用的算法充满技巧性。这个算法宣称是无锁,几乎可以保证任何时候停止某个特定线程都不会导致整体进程的停止(极端情况下,这一点还是会阻塞整个进程的)。


本文尝试详细地分析其中的完整代码,从而收获其中的无阻塞编程技术。

点击查看原文 >>

@技术头条 2017-10-15 09:38 / 原作者微博:@并发编程网站 / 0个评论
赞过的人: @技术头条
要不要再学学下面的文章?
以非阻塞方式执行一个函数 (blog.codingnow.com)
用过 skynet 的应该都碰到过:当我们在服务中不小心调用了一个长时间运行而不返回的 C 函数,会独占一个工作线程。同时,这个被阻塞的服务也无法处理新的消息。一旦这种情况发生,看似是无解的。我们通常认为,是设计问题导致了这种情况发生。skynet 的框架在监测到这种情况发生时,会输出 maybe in an endless loop 。

如果是 Lua 函数产生的死循环,可以通过发送 signal 打断正在运行运行的 Lua 虚拟机,但如果是陷入 C 函数中,只能事后追查 bug 了。

那么,如果我原本就预期一段 C 代码会运行很长时间,有没有可能从底层支持以非阻塞方式运行这段代码呢?即,在这段代码运行期间,该服务还可以接收并处理新的消息?
by @技术头条 2024-03-13 13:20 查看详情
代码变更风险可视化系统建设与实践 (tech.meituan.com)
本文整理自美团技术沙龙第77期《美团亿级流量系统的质量风险防控和稳定性治理实践》。文章第一部分介绍了软件系统风险与变更;第二部分介绍了代码变更风险可视化系统的能力建设;第三部分介绍了整个系统在美团内部实践落地的情况;最后是对未来的规划和展望。希望对大家能有所帮助或启发。
by @技术头条 2023-10-24 23:48 查看详情
专为技术写作人员提供的 7 条 Git 技巧 (linux.cn)
Git 帮助我跟踪内容的版本,并与开源社区进行协作。它是我存储工作成果、共享和讨论改进的重要工具。我主要使用的工具包括浏览器、用 OpenSSH 连接 Foreman 实例、用 Vim 编辑源文件,以及使用 Git 进行版本控制。

本文重点介绍在开始使用 Git 和为 Foreman 文档做贡献时经常遇到的挑战。适用于中级 Git 用户。
by @技术头条 2023-07-30 17:35 查看详情
低代码,想说爱你不容易 (blog.yuanpei.me)
当我了解了低代码和零代码的差异以后,我突然明白,我需要的其实是零代码,因为我希望那帮业务人员能自己搞定,这样就不用再来烦我,可经历这段时间的“低代码”,我清醒地认识到,这个想法根本不现实。
by @技术头条 2023-07-04 23:24 查看详情
AI 加持的代码编写实战:快速实现 Nginx 配置格式化工具 (soulteary.com)
本篇文章聊聊如何使用 GPT 快速完成一个开源小项目,解决实际的问题,顺手点亮 GitHub 上 Nginx 开源社区的贡献者图标。“Talk is Cheap,Show you the Code。
by @技术头条 2023-07-02 23:45 查看详情
技术领域小白必不可少的工作技巧和诀窍 (linux.cn)
刚刚入职那几天确实令人害怕。 我现在依然可以清晰举出很多例子,例如在第一天上班前的晚上无法入睡,因为不知道第二天将要发生什么而内心崩溃。对于大多数人来说,开始一份新工作就像踏入未知领域。即使你已是行业的资深人士,不可否认的是,你内心可能还是会对即将发生的事情感到有点害怕。

可以理解的是,刚入职的时候你的事情很多。你要认识新的人,有新的项目和技术要了解,有文档要阅读,有教程要看完,还有没完没了的人事培训和要填的文件。这可能让你感觉压力山大,再加上你还面临着相当大程度的不确定性和未知数,以上种种能引起焦虑。

促使我写这篇文章有两个原因,首先是在我还是学生的时候,大部分讨论都围绕着如何找一份技术工作,却没有人谈论接下来发生的事情。如何在新角色中脱颖而出?现在回过头来看,我想我当时认为最困难的事情是得到一份工作,之后发生什么的一切我都可以自己弄清楚。

同样的,在我开始在这个行业工作之后,我发现大部分我看到的与职业相关的内容都是讨论如何从一个高级职位升到另一个高级职位。没有人真正谈论在此中间我们要做什么。实习生和初级工程师呢?他们在早期职业生涯中如何找到方向?

在拥有了三年全职软件工程师的经验(以及之前的几次实习)之后,我将这段时间的经历进行了复盘,并整理出一份我自己在适应新技术职位时使用过的技巧和诀窍清单。我想不只局限于前面的几个月,而是优先考虑如何让这段经历帮助你实现长期的成功。
by @技术头条 2023-04-09 21:44 查看详情
好代码的五个特质 (insights.thoughtworks.cn)
如何衡量代码好坏?SOLID采用了一组原则来定义好的代码,但是原则更像是规则,要么符合,要么不符合。而软件开发过程非常复杂,其间充满了平衡和妥协,事实上并没有一种非黑即白的规则可以适用。
by @Thoughtworks 2023-03-01 08:43 查看详情
用 Penpot 弥合设计和代码之间的鸿沟 (linux.cn)

用 Penpot 这个开源的设计工作空间来弥合编程和设计之间的鸿沟。

在计算机编程的大部分历史中,在创建应用的代码的程序员和创建应用的用户体验(UX)的设计师之间一直存在着鸿沟。这两个学科接受的培训大不相同,他们使用的工具也不同。程序员使用文本编辑器或集成开发环境来编写代码,而设计师则经常绘制小部件布局和潜在交互的示意图。虽然一些 IDE,像Eclipse和Netbeans,有界面设计组件,但它们通常专注于小部件的位置而不是小部件的设计。开源设计应用Penpot是一个协作式设计和原型设计平台。它有一套新的功能,使设计师和开发者可以很容易地用熟悉的工作流程协同工作。Penpot 的设计界面可以让开发者在设计过程中和谐地编写代码,这是其他工具所无法做到的。自从我们上次介绍它以来,它已经有了长足的进步。它的最新功能不仅改善了你使用 Penpot 的体验,还推动了开源的 Penpot 应用超
by @技术头条 2023-02-20 22:18 查看详情
代码的简单设计五原则 (insights.thoughtworks.cn)
简单设计五原则中,测试要确保通过(满足需求)、重复应该被消除、元素没必要就不要存在,这几条看起来相对具体,而且能见字如意。
by @Thoughtworks 2023-02-15 09:46 查看详情
基于代码属性图的自动化漏洞挖掘实践 (paper.seebug.org)
应用程序分析技术挖掘应用漏洞一直以来都是学术界和工业界的研究重点之一。从最初的正则匹配到最近的代码属性图挖掘方案,国内外有很多来自不同阶段的安全工具或商业产品来发掘程序代码的安全问题。在 Java 语言方面,业界已经有了不少出色的产品,如 CodeQL 等,但是,多数产品考虑的角度是从甲方视角或开源视角出发的,也就是产品的输入大部分是以源码为主。然而,我们安全研究人员更多面对地是编译后的项目,比如编译后的 WAR、第三方依赖 JAR 等形式。对于此类形式目标的漏洞挖掘,当前存在的审计产品或多或少都有一些限制,比如最近几年很火的 CodeQL 就无法直接处理此类形式的目标代码。当前,安全研究人员大多以人工或一些辅助工具来完成此类形式项目的漏洞挖掘。很明显,这种方式审计效率是非常低的,而且,审计结果也很容易遗漏。为此,需要一款能解决此类问题的工具。
by @技术头条 2023-02-12 14:12 查看详情