当前位置:   article > 正文

从一到无穷大 #1 隔离变化,机制与策略分离_unix 策略与机制分离

unix 策略与机制分离

在这里插入图片描述本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。

区分机制和策略是Unix设计背后隐含的最好思想之一。

任何一个学过操作系统的学生都应该听过这段文字。多么美妙的思想啊,但是真正理解其思维精髓需要大量的工程实践和辅以横向对比,从某种角度讲我认为这种能力是抽象能力以及丰富想象力的聚合,谓之为技术人员的九阳神功也不为过。

Libco[1]是一个在2016年由腾讯开源的一个有栈非对称,1:N模型的协程库,其主体思路是对已知的阻塞操作,条件变量,yield(pool)执行hook替换,实际把所有的套接字设置为非阻塞,并加入全局队列,在套接字可读/可写时执行调度,这其实已经是一个较为完整,且trick的项目,至少在我三年前来看。

让我们再来看看boost.fiber[2]这个优美的家伙吧,fiber并没有提供像Libco那样开箱即用的协程能力,而是抽象出了一个较低层级的体系,比如可自主实现的携程调度接口;锁,条件变量,barrier,join/detach,channel等原语;可自由扩展1:M->N:M等等。但是我们可以很轻松的让Fiber所在线程陷入阻塞,因为系统调用接口的管理完全交给了用户。让我们再来回味Fiber强大的抽象模型吧,只实现标准原语与接口,具体的逻辑交给用户,分离可变部分和不可变部分,至少在写RocketCo[3]时我没想到这些。helio[4]是一个基于boost.fiber开发的现代网络框架(被用作dragonfly[5]的网络框架),其中对于fiber的使用十分的老辣,当然也可以看出机制与策略分离的好处。

在相对熟悉的领域举一些成功的例子,混沌工程学科,Taskflow,SysAK,多模型数据库的统一底座。

再举例子一些失败的例子,Spring框架之于阿里巴巴,我司的不少基架产品。

站在公司的角度而言,产品层面上的隔离变化显然是省钱,磨练竞争力,品牌影响力的好事;

当然这种思维的缺失也导致不少依赖开源社区的下游公司苦不堪言[6]。

引用:

  1. https://github.com/Tencent/libco
  2. https://www.boost.org/doc/libs/1_80_0/libs/fiber/doc/html/index.html
  3. https://github.com/Super-long/RocketCo
  4. https://github.com/romange/helio
  5. https://github.com/dragonflydb/dragonfly
  6. 夜天之书#4 https://mp.weixin.qq.com/s/l2KYPl9hkviEE8jRTIVs5g
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/249085
推荐阅读
相关标签
  

闽ICP备14008679号