InfraPub 为您找到相关结果 710

Golang Context 探究

:= newCancelCtx(parent) // 构建父子上下文之间的关联,当父上下文被取消时,子上下文也会被取消 propagateCancel(parent, &c) return &c, func() { c.cancel(true, Canceled) } } 我们点看 propagateCancel 的实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 func propagateCancel(parent Context, child canceler) { done := parent.Done() // 父...阅读全文

博文 2021-02-25 09:27:27 lxkaka

DPDK Graph Pipeline 框架简介与实现原理

libgraph 的参照对象。因为 VPP 项目整体是一个非常全面的解决方案,从中剥离核心的设计框架为其它轻量级项目所用就变得很有意义。这也是 Libgraph 的产生背景。虽然它目前还是DPDK 中相对比较新的 lib,但是其优秀的设计思想还是值得学习参考。 下面将首先介绍 libgraph 架构的核心概念:标量和向量包处理(scalar vs vector packet processing)以及它们之间的区别。然后再介绍 libgraph 中的核心组件,以及它们之间的联系和交互方式。最后,我们将介绍 libgraph 的具体用例以及优缺点。 背景 DPDK libgraph 是一个向量包处理的框架。与传统的标量包处理模型(一系列函数负责处理一个数据包,复直到所有数据包处理完毕)相比,向量数据包处理...阅读全文

博文 2023-02-09 07:13:55 掘金

开源软件对于商业机构的6大好处

从根本上说,开源模式要由于专有模式,为什么这么说呢?下面总结了商业机构及政府机构可以从开源软件中获得的六大好处。 1、能更直观的选择供应商 在你投资工程和经济资源将产品整合到你的基础设施之前,需要确保产品的合格性:是否处于积极开发状态?是否有定期的漏洞修复和安全更新?产品是否能根据需求按时更新? 最后一点或许比你想象的还要要。解决方案必须满足产品需求。但需求会随市场及商业的变化而变化,如果产品不随之做出改变,未来就需要花费一笔不菲的迁移成本。 而在开源的世界里,你可以综合产品的发展速度以及社区的健康程度来比较供应商。一个更积极、更多元化的社区能在一两年后开发出更好的产品,这是一个关键的参考因素。当然,供应商必须要有能力解决在项目发展过程中出现的不稳定性问题。最后,还需要供应商具备较长的支...阅读全文

博文 2017-11-15 23:41:11 debian.cn

Debian目前面临的问题:钱足够但很缺人!

认为需提供更好的入门指南,以便于更多志愿者和维护者得以参与 Debian 项目开发中。 人员问题并非 Debian 独有。上个月,Linux 基金会成员 Sarah Novotny 也向 Register 提出了降低新内核开发人员门槛中的挑战。 另一个问题是新软件包会卡在 NEW 队列中等待核准。Carterh 说,“这是我们大家的一个痛点。很多软件包会卡顿很长时间”。今年早期,NEW 队列的规模达到了历史新高,通过团队努力到 7 月已大为削减。 Carter 说,项目本身正在不断改进,也需要做更多努力。团队正与联想商洽在其 OEM 笔记本上预装 Debian 系统,虽然 Carter 也明白,即便是 Debian 开发人员,大多也会在购买这样的笔记本后立刻卸载预装版本并装系统。团队认识到...阅读全文

博文 2020-10-09 10:24:04 debian.cn

你和 Linux 高手只差了一个 LFS

,LFS 绝对配得上称为一本好书,或者说一本好教材。市面上,很难再找到一本如此具体又如此精炼的教材了。 首先,它并不是只是讲讲简单概念,它很具体,具体到就是一个例子,一个告诉你怎么亲手构建出属于自己的 Linux 系统的例子。 其次,它很精炼,它的精炼表现在两个方面:系统构建出来不臃肿;文字描述很精炼。 最后还有一点,这一点至关要。尽管文字的描述非常精炼,甚至是精炼到枯燥,但是作为一本教材,作者无时无刻不再想尽办法,让你学到东西。无论是编译指令下方各个参数的介绍,还是软件包安装小节下方软件包内容的介绍,作者真的是想尽办法的试图把知识传递给读者。 LFS 没有缺点吗? 那自然是有的,可以原封不动的照抄上面的优点。辩证的看待这些优点,你就会发现这些优点是有代价的。 首先,由于这个例子过于生动形象,所...阅读全文

博文 2017-07-17 17:45:59 debian.cn

玩转 AWS 的必备工具

再用AWS的建立镜像工具转化成一个订制的AMI。那样手动式建立的AMI全过程一般用时费力不易配备,并且容易错误。因此 大家必须一个专用工具来自动化技术全部建立AMI的全过程,与此同时叙述建立AMI的编码能够储存而且根据再配备复使用,来很大地优化和管理方法AMI建立的全过程。 Packer就这样一个自动化技术建立AMI的专用工具。如下图所显示,Packer根据JSON文件模板来叙述一个建立AMI的全过程,如何配置AMI都由编码叙述。客户只需根据改动这一软件更新来随后实行一个简洁的指令来自动生成订制的AMI。那样订制AMI的全过程则能够直接进入版本号智能管理系统,便捷消费者查看和跟踪订制全过程的转变 。...阅读全文

玩转 AWS 的必备工具

AMI全过程一般用时费力不易配备,并且容易错误。因此 大家必须一个专用工具来自动化技术全部建立AMI的全过程,与此同时叙述建立AMI的编码能够储存而且根据再配备复使用,来很大地优化和管理方法AMI建立的全过程。 Packer就这样一个自动化技术建立AMI的专用工具。如下图所显示,Packer根据JSON文件模板来叙述一个建立AMI的全过程,如何配置AMI都由编码叙述。客户只需根据改动这一软件更新来随后实行一个简洁的指令来自动生成订制的AMI。那样订制AMI的全过程则能够直接进入版本号智能管理系统,便捷消费者查看和跟踪订制全过程的转变 。...阅读全文

深入学习golang — channel

goroutine的创建数量: func Serve(queue chan *Request) { for req := range queue { sem <- 1 go func() { process(req) // Buggy; see explanation below. <-sem }() } } 上面的代码看似简单清晰,但在go中,却有一个问题。Go语言中的循环变量每次迭代中是用的,更直接的说就是req在所有的子goroutine中是共享的,从变量的作用域角度来说,变量req对于所有的goroutine,是全局的。 这个问题属于语言实现的范畴,在C语言中,你不应该将一个局部变量传递给另外一个线程去处理。有很多解决方法,这里有一个讨论。从个人角度来说,我更倾向下面这种方式: func...阅读全文

博文 2021-01-25 12:39:17 博客园

六大算法之三:动态规划【转载】

->A4};……; {A1,A2,...,Ai}->Ai+1. 这种方式就是第二数学归纳法。对于Ai+1需要前面的所有前序状态才能完成推理过程。我们将这一模型称为高阶马尔科夫模型。对应的推理过程叫做“动态规划法”。 上述两种状态转移图如下图所示: 能用动规解决的问题的特点 能采用动态规划求解的问题的一般要具有3个性质: (1) 最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。 (2) 无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。 (3)有叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。(该性质并不是动态规划适用的必要条件,但是如果没...阅读全文

博文 2021-07-31 07:18:53 CSDN博客

深入理解Golang之context

:func WithValue(parent Context, key, val interface{}) Context { if key == nil { panic("nil key") } if !reflect.TypeOf(key).Comparable() { panic("key is not comparable") } return &valueCtx{parent, key, val} }这里添加键值对不是在原context结构体上直接添加,而是以此context作为父节点,新创建一个新的valueCtx子节点,将键值对添加在子节点上,由此形成一条context链。获取value的过程就是在这条context链上由尾部上前搜寻:cancelCtxcancelCtx结构体...阅读全文

博文 2021-01-27 09:05:27 知乎