首页 文章 精选 留言 我的

精选列表

搜索[for update],共8454篇文章
优秀的个人博客,低调大师

Linux内核RCU(Read Copy Update)锁简析-前传

如果你用Linux perf tool的top命令做热点纠察时,你会发现,前10名嫌疑犯里面肯定有好几个都是锁! 在进行并行多处理时,不可 避免地会遇到锁的问题,这是不可避免的,因为这一直以来也许是保护共享数据的唯一方式,被保护的区域就是临界区。而我们知道,锁的开销是巨大的,因为它不 可避免地要么等待,要么让别人等待,然而这并不是开销的本质,开销的本质在于很多锁都采用了“原子操作”这么一个技术,如此一个原子操作会对总线或者 cache一致性造成很大的影响,比如要对一个变量进行原子加1,不要认为它很简单,其实背后会有很多不希望的操作,在某架构的处理器上,首先要LOCK 总线,这意味着LOCK不解除期间,其它处理器不能访存(起码是内存的某些区域),可能还要涉及到刷cache,或者触发cache一致性操作...这还 不算最猛的打击,在某些架构上,存在内存栅栏,它会刷掉CPU的流水线,刷掉cache,几乎所有的为优化而设计的方案全部失效,当然,这是代价,收益就 是你保护了临界区。 你要保护临界区,你要付出代价,这个代价如果用复杂的锁来支付的话,未免有点大。非要这样子吗?也许是你的数据结构设计地不好,也许是你的代码流设计地不 好,比如多个线程同时读共享数据,两个线程一个读一个写,能否采用环形缓冲区来减轻竞争呢?事实上很多诸如网卡,硬盘等共享外设驱动程序都是这么玩的,代 码只要保证读指针和写指针不相互超越即可,这样可以最小化锁的使用,当然这只是一个非常简单的例子。 设计好的数据结构和代码流程是一方面,但是这个层次不够抽象,更好的方式就是设计一种更加优化的锁。读写锁这种不对称的锁应对读者多写者少的情景是一种优 化的锁,它对读者的优待就是无需等待,只要没有写者就可以直接读,否则才等待。而对于写者,它需要等待所有读者的完成。这种读写的实现可以依赖于另一种叫 做自旋锁的机制实现,我的一个实现如下所示: typedefstruct{ spinlock_t*spinlock; atomic_treaders; }rwlock_t; staticinlinevoidrdlock(rwlock_t*lock) { spinlock_t*lck=lock->spinlock; if(likely(!lock->readers++)) spin_lock(lck); } staticinlinevoidrdunlock(rwlock_t*lock) { spinlock_t*lck=lock->spinlock; if(likely(!--lock->readers)) spin_unlock(lck); } staticinlinevoidwrlock(rwlock_t*lock) { spin_lock(lock->spinlock); } staticinlinevoidwrunlock(rwlock_t*lock) { spin_unlock(lock->spinlock); } 很OK,不是吗?但是最好的方案就是彻底抛弃锁,彻底不用锁。 我曾经在设计我的转发表的时候,为了降低lock开销,我为每个CPU复制了一个局部的本地转发表,这些转发表是一致的,由路由表生成,心想这就可以避免 竞争,然而,这些转发表总要面临更新问题,如何更新它们??我最初采用的方式是采用IPI(处理器间中断),在处理函数中,停掉处理线程,然后更新数据, 最后开启线程,这样可以在处理期间避免lock。十分合理,不是吗?可是我想复杂了。 仔细看看读写锁的写锁,它鲁莽地进行了标准锁定操作,而读锁也是在第一个读者进来的时候采用了锁定动作。这些锁定操作导致的等待可以避免吗?看看我原始的 IPI方案,停掉线程是为了防止读者读到错误的数据,实际上是将主动将执行流让位给了写者,写者先来,然后再看看读写锁中的写者,发现有读者存在时,没有 主动地让位,而只是被动地等待,这种等待很无聊! 能否将我的方式和读写锁的方式结合呢? 怎么结合?按照刚刚的思路,无非就是为写者是被动等待还是抢先读者做一个决策!但是它还有一个别的选择,那就是先按照自己的流程写数据,不是写原始数据, 而是写原始数据的一份拷贝(伟大的写时拷贝),然后将这件事挂在一个未竟事务链表上直接走人,等待系统发现所有的读者都完成时用链表上的数据逐个覆盖原始 数据。这是个多么好的结合,这就是伟大的RCU锁。读者的代价就是简单地标示一下有人读即可,而写者也无需等待持锁,直接写副本,写完走人,后来的事就交 给系统了.... 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1673574

优秀的个人博客,低调大师

更新卡券接口(alipay.pass.instance.update)JAVA版本小样

官方接口文档:https://docs.open.alipay.com/199/105250/ 发放卡券接口参考该贴:https://openclub.alipay.com/read.php?tid=2193&fid=8 使用场景介绍 对于已经发布的卡券,商户可通过此接口进行更新,更新卡券接口包含三大主要功能:核销卡券、失效卡券、更新卡券样式内容 核销卡券功能 核销卡券主要描述开发者如何将发放出去的卡券进行核销,使卡券在用户的支付宝客户端展示为已使用状态。对于支付宝卡券而言,核销操作只是将卡券状态变更为USED(已使用),用户客户端展示为已使用状态,未涉及资金流的核销。仅支持核销有效状态的卡券,若卡券处于卡券删除或者已转赠,不可进行核销操作 失效卡券功能 失效卡券主要描述开发者如何将发放出去的卡券进行作废,让卡券在用户的支付

优秀的个人博客,低调大师

Rolling Update - 每天5分钟玩转 Docker 容器技术(140)

滚动更新是一次只更新一小部分副本,成功后,再更新更多的副本,最终完成所有副本的更新。滚动更新的最大的好处是零停机,整个更新过程始终有副本在运行,从而保证了业务的连续性。 下面我们部署三副本应用,初始镜像为 httpd:2.2.31,然后将其更新到 httpd:2.2.32。 httpd:2.2.31 的配置文件如下: 通过kubectl apply部署。 部署过程如下: 创建 Deploymenthttpd 创建 ReplicaSethttpd-551879778 创建三个 Pod 当前镜像为httpd:2.2.31 将配置文件中httpd:2.2.31替换为httpd:2.2.32,再次执行kubectl apply。 我们发现了如下变化: Deploymenthttpd的镜像更新为httpd:2.2.32 新创建了 ReplicaSethttpd-1276601241,镜像为httpd:2.2.32,并且管理了三个新的 Pod。 之前的 ReplicaSethttpd-551879778里面已经没有任何 Pod。 结论是:ReplicaSethttpd-551879778的三个httpd:2.2.31Pod 已经被 ReplicaSethttpd-1276601241的三个httpd:2.2.32Pod 替换了。 具体过程可以通过kubectl describe deployment httpd查看。 每次只更新替换一个 Pod: ReplicaSethttpd-1276601241增加一个 Pod,总数为 1。 ReplicaSethttpd-551879778减少一个 Pod,总数为 2。 ReplicaSethttpd-1276601241增加一个 Pod,总数为 2。 ReplicaSethttpd-551879778减少一个 Pod,总数为 1。 ReplicaSethttpd-1276601241增加一个 Pod,总数为 3。 ReplicaSethttpd-551879778减少一个 Pod,总数为 0。 每次替换的 Pod 数量是可以定制的。Kubernetes 提供了两个参数maxSurge和maxUnavailable来精细控制 Pod 的替换数量,我们将在后面结合 Health Check 特性一起讨论。 下一节我们讨论如何回滚。 书籍:1.《每天5分钟玩转Docker容器技术》https://item.jd.com/16936307278.html 2.《每天5分钟玩转OpenStack》https://item.jd.com/12086376.html

优秀的个人博客,低调大师

Update:实时后端云服务野狗获 2400 万 Pre-A 融资

2016年1月27日,为个人和企业提供实时后端云服务的野狗科技公司宣布,已于 2015年10月 完成了 2400 万人民币的 PreA 轮融资,同时,产品正式版将于 1月28日 上线。 跟之前的硬件云服务不同,目前野狗的主要业务是提供数据存储和实时通信,有免费试用版以及满足个人和企业不同需求的付费版。除了标准化的云服务,野狗还提供私有云部署和技术咨询。今年,野狗还会推出实时视频等业务和更多完整的产品解决方案。 据刘之,作为一家实时后端云服务商,野狗为应用开发提供数据存储和实时通信功能。“许多提供 IM SDK 的公司,对用户使用环境的限定比较死。” 野狗提供的实时通信可定制性更强,开发者可以非常自由的根据自己的意愿来设计产品。 野狗主打的实时特性,是指数据的实时同步。与消息推送模式的最大区别就是,野狗做的是云端的一个数据库,每个客户端可以将数据节点的数据进行同步。 —————————————回忆历史的分割线—————————————— 去年11月第一次见刘之,他兴奋的向我介绍着他的项目:“野狗是个开发云服务平台,它能降低开发门槛,节省时间和支出。” 大半年过去了,在还未完全装修结束的新 “狗窝”,我和刘之又聊起了产品和物联网。 大飛:讲讲 WildDog 野狗? 野狗 CEO 刘之: 现在创业公司很多,很多公司找不到工程师。 野狗是一个云服务,主要提供实时和无需后端编程的技术解决方案。我们支持物联网和互联网网络下的实时传输。对 HTML5 和物联网的支持特别的好。 大飛:和国内的云服务创业公司相比,野狗不同在了什么地方?现在产品方向的规划是什么? 野狗 CEO 刘之: 最大的不同就是: 第一个,学习曲线很简单。复杂的事情我们都帮做了。刚学会 Javascript 的入门汉,都可以开发应用。 第二个,我们不是从 0 造了个轮子。 我们 SDK 的接口完全兼容刚被 Google 收购的 Firebase。Firebase 在国外有 19 万个开发者。API 很成熟。而且基于 Firebase 有众多开源项目,不需要特别费心就可以直接移到中国了。 我们计划月底发布 Beta 版本。现在在 Alpha 版本,还在不断完善。 大飛:从去年11月 报道至今,半年多的时间,产品为何还未上线?如果出现了问题,集中在了哪? 野狗 CEO 刘之: 云服务的难度除了技术以外,最大的难度还是产品如何定义。这个是我们一直纠结的。 国内外的很多云服务不是技术不牛逼,而是产品化做的很糟糕。PaaS 服务一直做不起来,就是因为处于易用性和自由度的中间,很尴尬。 我们花了很多时间在调研和验证上。让人很方便的使用,很快的学会。 大飛:为何砍掉了为快速原型开发而生的 WildDog HardWare? 野狗 CEO 刘之: 我们更加专注在我们擅长的软件上。我们也意识到在 PaaS 服务上不存在细分,也放弃了垂直 PaaS 的想法。 大飛:你为什么说 Google Thread 才是真物联? 野狗 CEO 刘之: 我们的工程团队花了几个月,把物联网的核心应用层 CoAP 协议给吃透了。文档翻译的贡献,我们共享在了 Github 上。这个协议是唯一的物联网标准。不使用传统的 TCP 协议,流量节省 10 倍,内存使用更省,更省电。一些智能设备比如 GPS 追踪器使用了这项技术,可以特别省电。 Google Thread 能够解决问题。物联网的三大问题是安全,隐私和省电。Google Thread 都很好的解决了。一节纽扣电池可以支持传感器用五年。 除了苹果以外的整个产业和学术链都在支持这件事情。 Nest 被收购后,整个团队都在全力做 Thread。未来它会直接和 Android,Chrome 等打通。Web Of Things 的时代,你通过浏览器和手机就可以控制硬件。 大飛:来给行业打打鸡血。 野狗 CEO 刘之: 2012年 我在研究硅谷的 IM 产品 MessageMe 的时候,觉得它很有意思。它的产品基本都是在使用第三方的云,图片,语音,视频都是。十几个人,只是把它的那块业务逻辑和运营做好就可以了。 当时我就觉得硅谷产品零件式拼装的模式很赞。社会化大生产带来社会分工细分。 互联网 + 的到来,让整个行业创业者和技术研发忽然间就不够用了。这以后会是常态,很长时间内都不会改善的。 本文转自d1net(转载)

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。