Go语言中文网 为您找到相关结果 244

Golang 数据结构之【4.4顺序栈】

由于 进栈和出栈没有涉及任何循环语句,因此时间复杂度均是 0(1) golang代码实现如下: package main //顺序栈 import ( "errors" "fmt" ) const MaxSize = 20 //存储空间初始分配量 type SElemType int // SElemType类型根据实际情况而定,这里假设为int type SqStack struct { data [MaxSize]SElemType //栈的数据容量,用数组实现。如果不确定最大值可以用slice类型,这里我选择用数组。 top int //栈顶指针 } // 初始化一个空栈 func (s *SqStack) InitStack () { s.top = -1 } // 把s置为空栈 f...阅读全文

博文 2019-05-16 16:34:43 JiBadBoy

golang语法速览

关键字 break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 内建常量: true false iota nil 内建类型: int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error 内建函数: make len cap new appen...阅读全文

博文 2017-10-13 05:34:46 sladeliu

Golang 数据结构之【4.5共享栈】

图片来源于《大话数据结构》 图片来源于《大话数据结构》 两栈共享空间的结构的golang代码如下: package stack import ( "fmt" "errors" ) //共享栈 const MaxDoubleSize = 20 //存储空间初始分配量 type DoubleStack struct { data [MaxDoubleSize]SElemType top1 int //栈1栈顶指针 top2 int //栈2栈顶指针 } // 初始化一个空栈 func (d *DoubleStack) InitStack () { d.top1 = -1 d.top2 = MaxDoubleSize } // 把d置为空栈 func (d *DoubleStack) ClearS...阅读全文

博文 2019-05-16 16:34:43 JiBadBoy

golang 源码学习之WaitGroup

数据结构 //sync/waitgroup.go type WaitGroup struct { noCopy noCopy // 不可复制,只能指针传递 // 对齐的8byte存储状态, 另外4byte存储信号。状态的高32位counter计数器,低32位waiter计数器 // counter未执行完的goroutine。waiter正在等待的goroutine。那么WaitGroup可以放多少goroutine呢?2^32 state1 [3]uint32 } Add //sync/waitgroup.go func (wg *WaitGroup) Add(delta int) { // statep状态(包含counter和waiter计数器),semap信号 statep, sem...阅读全文

博文 2019-10-27 23:32:52 aside section._1OhGeD

ETCD探索-MVCC

ETCD探索-MVCC MVCC MVCC模块ETCD的存储模块,是ETCD核心模块。 作为一个开源项目,其代码的封装是值得我们学习的。MVCC作为底层模块,对上层提供统一的方法,而这些方法都定义在kv.go这个文件中,很像一个头文件(.h)。我们可以只看kv.go以及配合kv_test.go就可以知道mvcc包是怎么用的。 kv.go type KV interface { ReadView WriteView // Read creates a read transaction. Read(trace *traceutil.Trace) TxnRead // Write creates a write transaction. Write(trace *traceutil.Trace) ...阅读全文

博文 2020-02-19 17:32:41 HammerMax

[Golang]一个工单系统的重构过程-FP vs OOP

背景 组内的数据管理平台承担着公司在线特征数据的管理工作。开发通过提交工单接入我们的数据系统。工单模型在设计之初只考虑到了一种类型的工单(新特征的申请),对于工单生命周期的每个节点分别用一个接口去实现。随着业务迭代,还有一些操作也需要通过走工单让管理员审批执行。此时最初的工单模型不能满足需求,此时为了让系统先用起来,我们的做法是写单独的接口去实现...这样虽然能用,但是导致后端代码里多出来了很多API。趁着过年前几天业务不多,我对工单部分代码进行了重构,希望达到的效果是后续不同类型的工单复用同一套工单流程,同时减轻前后端交互的成本。 需求分析 经过抽象,对于我们的系统不同类型的工单,工单的生命周期都是一样的,工单只有这些状态: image-20200223161953851.png 工单这几...阅读全文

博文 2020-02-23 18:32:49 一根薯条

百亿级日志系统架构设计及优化

本文将从海量日志系统在优化、部署、监控方向如何更适应业务的需求入手,重点从多种日志系统的架构设计对比;后续调优过程:横向扩展与纵向扩展,分集群,数据分治,重写数据链路等实际现象与问题展开。 日志系统架构基准 有过项目开发经验的朋友都知道:从平台的最初搭建到实现核心业务,都需要有日志平台为各种业务保驾护航。 图片.png 如上图所示,对于一个简单的日志应用场景,通常会准备 master/slave 两个应用。我们只需运行一个 Shell 脚本,便可查看是否存在错误信息。 随着业务复杂度的增加,应用场景也会变得复杂。虽然监控系统能够显示某台机器或者某个应用的错误。 然而在实际的生产环境中,由于实施了隔离,一旦在上图下侧的红框内某个应用出现了 Bug,则无法访问到其对应的日志,也就谈不上将日志取出...阅读全文

golang分布式存储 读书笔记(3)——数据冗余之RS码

对象存储的数据冗余 如果数据只存储一份,存储设备坏了数据就丢失了,所以需要做数据冗余。 常见的数据冗余策略就是多副本冗余,该策略实现简单,但是代价比较高。书中介绍的冗余策略是使用Reed-Solomon纠删码实现的。 RS纠删码中有数据片和校验片的概念,假如说选择4个数据片,那么就会将数据分成4个分片对象。每个分片的大小是原始对象的25%,如果选择2个校验片,那么会同时生成2个和数据片大小一样的校验片,所以一个文件最后会得到6个分片。 神奇的是,6个分片里面,只要有任意4个分片没有损坏,都可以还原出原始文件。 评价一个数据冗余策略的好坏,主要是衡量该策略对存储空间的要求和其抗数据损坏的能力。 对存储空间的要求是指我们采用的冗余策略相比于不使用冗余要额外支付的存储空间,用百分比表示。 抗数据损...阅读全文

博文 2019-02-11 19:34:41 StormZhu

Go夜读-IPFS预习资料

IPFS就其本身,没有用到多少新技术,大多数都是已有技术和思路,但并不能说就没有创新,类似比特币。取名为IPFS,星际文件系统,有点科幻意味,不过思路是,以后组建星际互联网,如果基于用HTTP的基于资源定位符寻址,延时等都不可接受,而基于内容寻址,一定程度上能解决这个问题,缓解光速屏障。 分布式哈希表 思路:KadDHT的节点寻址与内容寻址同构,在KAD基于异或来计算逻辑距离的基础上,节点倾向于连接与自己距离更近的节点,存储与自己距离更近的内容Key值,并在此之上加入了延时等具体物理距离的考量(Coral DHT)。引入S-KadDHT加入了一定的抗女巫攻击能力,因为生成一个公私钥需要计算难度值。 Git IPFS的基础数据结构与组织方式受Git影响很深,首先Git是一套基于内容寻址的文件系...阅读全文

博文 2019-09-16 11:02:52 xcshuan

程序员应该如何保护用户的密码

最近几年的新闻中一直有互联网头部公司系统被攻击导致用户密码泄露的新闻。那密码被破解肯定和当初项目伊始时选择的密码哈希方案造成的历史包袱有关。我们不讨论这些互联网巨头应该采用什么方案防止用户密码被破解,我知道的方案人家养的那些技术大拿更知道了。我们就来说一下,如果我们有机会自己从零开始做一个系统时,应该选择什么样的哈希算法有效防止用户的密码不被破解。 既然想保护用户密码不被破解,就先了解下破解密码的手段吧。 攻击密码的主要方法 我们需要防御的两种主要的密码攻击方式是: 字典攻击 暴力攻击 它们的工作方式非常简单:使用预先生成的密码哈希列表并进行简单的比较,以找到创建所需哈希的字符串。对于未加盐的密码,可以下载大量预先生成的密码列表。然后只需要简单查找即可。这种列表称被为彩虹表。 如果密码使用了...阅读全文

博文 2020-04-11 10:32:43 KevinYan_a990

一个示例阐述 Go 应用的优雅中止

写在前面 适用人群 代码级支持优雅中止是必要的 优雅中止的含义 Kubernetes 中 Pod 的终止机制 优雅中止的 Go 代码示例 源码解读-优雅中止的处理思路 源码解读-值得关注的几个点 小结 参考 写在前面 按照一般的设计原则, 每个 HTTP 请求都是无状态的,因此大多情况下 Web 应用都很容易做水平扩展。“无状态”也意味着 HTTP 请求发起重试的成本是很低的,从而使得 Web 接口的开发很少关注优雅中止(一部分也因为 Web 框架做了这部分的考虑)。 不过,业务中 ① 总会存在对中止比较敏感的接口(比如支付相关),并且 ② 总会存在一些带状态的服务,此时优雅中止就显得比较重要了。 本文通过一个Go 定时任务示例来简单介绍 Go 技术栈中优雅中止的处理思路。 适用人群 入门—...阅读全文

博文 2019-06-17 21:07:01 敬维

4. golang的整数和浮点数以及bool类型

一, 整数 整数,就是存放整数值的,如0, -1, 800等 整数的类型: 类型 有无符号 占用存储空间 值范围 备注 int8 有 1字节 -2^7 ~ 2^-1 int16 有 2字节 -2^15 ~ 2^15 -1 int32 有 4字节 -2^31 ~ 2^31 -1 int64 有 8字节 -2^63 ~ 2^63 -1 uint8 无 1字节 0 ~ 2^8 - 1 uint16 无 2字节 0 ~ 2^16 - 1 uint32 无 4字节 0 ~ 2^32 - 1 uint64 无 8字节 0 ~ 2^64 - 1 int 有 32位系统4个字节 64位系统8个字节 参考int32和int64 uint 无 32位系统uint32 64系统uint64 参考uint32和ui...阅读全文

博文 2020-01-22 17:32:44 瓦灯_c6f0

2018-08-19 说一说现在的Decentralized Storage的传输

golang是特别不适合拿来做应用层可靠协议开发的语言。所有的可靠协议都依赖于连接状态,在讲究并发的场景下,所有的状态都依赖于事件,所有的事件都依赖于内核文件描述符,问题是,在可靠场景下,我们常常需要将一个端口用作一块网卡,一块网卡可以有65536个描述符并发处理事件,一个端口却只有一个描述符,这一个描述符需要模拟出65536个描述符的事件处理效能,这本来就是令人头大的问题。golang本身的协程机制----固然golang和大多数的协程实现不尽一致----导致每一个事件的处理都应短暂,且事件之间应是无状态的,如果对于可靠协议各阶段的业务与事件理解不到位,极其容易实现出资源有余,而协议效能低下的情况。为什么要有上面一段呢?因为目前的Sia,IPFS,Storj,Swarm都是golang实现...阅读全文

go 闭包函数&执行生命周期

package main import "fmt" func main() { /* 函数式编程: 支持将函数作为另一个函数的参数, 叫回调函数 支持将函数作为另一个函数的返回值 一个函数有内层函数,该内层函数中,还会操作外层函数的局部变量,(外层函数中定义,外层函数的参数)并且该外层函数的返回值就是这个内层函数 该内层函数和局部变量,统称闭包结构, closure 闭包函数不会随执行结束而自动销毁 */ res := increment() fmt.Println(res) //fmt.Printf("%T", res) fmt.Println(res()) // 闭包生命周期 res1 := res() fmt.Println(res1) res2 := res() fmt.Printl...阅读全文

Gitee + 区块链:基于 IPFS 的去中心化代码托管环境探索

Gitee 团队一直在探索去中心化的存储技术,甚至是建立于区块链上的完全去中心化的存储,以为开发者提供更安全、稳定的代码托管环境,为此我们一直在跟踪和研究两大核心技术问题,一是去中心化的底层存储技术,二是适用的高效共识算法。一、去中心化的底层存储协议在底层存储协议方面, Gitee 团队深入研究了 IPFS 协议,同时在探索 IPFS 协议作为底层存储技术在实现去中心化代码托管的落地可行性和优缺点。IPFS(InterPlanetary File System – 星际文件系统)是一个基于内容哈希寻址的点对点的超媒体分发协议,2014 年开始由 Protocol labs在开源社区下推动发展,目前已经提供了基于 Golang 的开源实现(详情请访问:https://github.com/ip...阅读全文

博文 2019-10-31 17:32:53 aside section._1OhGeD

chaincode生命周期对docker的操作(更新中...)

core.yaml 为ture时,将docker的日志输出到fabric标准输出, attachStdout: false 逆向从链码调用到docker操作源码表 core/container/util/dockerutil.go NewDockerClient core/chaincode/platforms/util/utils.go DockerBuild core/chaincode/platforms/golang/platform.go GenerateDockerBuild core/chaincode/platforms/platforms.go StreamDockerBuild GenerateDockerBuild core/container/controller.g...阅读全文

博文 2019-06-06 01:32:41 天地一小儒

golang内核系列--深入理解函数闭包

问题闭包 是由函数及其相关引用环境组合而成的实体(即:闭包=函数+引用环境)。“官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。比如下面“斐波那契数列”闭包:func fib() func() int { a, b := 0, 1 return func() int { a, b = b, a+b return a } } 调用如下 f00 := fib() fmt.Println(f00(), f00(), f00(), f00(), f00()) 输出结果是:1 1 2 3 5 golang里是如何做到这种闭包管理的呢?闭包实现我们先对闭包分3种场景:闭包里没有引用环境(变量生命周期很短,调用完即释放...阅读全文

博文 2019-06-10 14:06:10 buptbill220

第二章 程序结构

基础知识结构 命名 声明 变量 赋值 类型 包和文件 作用域 命名 命名规则:一个名字必须以一个字母(unicode字母)或者下划线开头,后面可以跟任意数量的字母数字或者下划线。区分大小写。 go的25个关键字如下: break ; default; func ; interface ;select ; case ; defer ; go ; map ; struct ; chan; else ; goto ; package ;switch ; const ; fallthrough ; if ; range ; type ; continue ; for ; import ; return ; var ; 内建常量与内建函数如下 常量:true ; false ; iota ; nil ...阅读全文

博文 2018-11-01 17:34:39 zhaoxi_yu

基于MaxCompute的拉链表设计

摘要: 简单的拉链表设计 **背景信息:** 在数据仓库的数据模型设计过程中,经常会遇到这样的需求: 数据量比较大; 表中的部分字段会被update,如用户的地址,产品的描述信息,订单的状态、手机号码等等; 需要查看某一个时间点或者时间段的历史快照信息。(比如,查看某一个订单在历史某一个时间点的状态,比如,查看某一个用户在过去某一段时间内,更新过几次等等) 变化的比例和频率不是很大,比如,总共有1000万的会员,每天新增和发生变化的有10万左右;如果对这边表每天都保留一份全量,那么每次全量中会保存很多不变的信息,对存储是极大的浪费;   ![图片描述](http://img.blog.csdn.net/20180321141430767?watermark/2/te...阅读全文

3. golang的变量整体介绍以及分类

[toc] 任何高级语言,变量都是程序最基本的组成单位. golang中的变量相当于给内存中一个数据的存储空间打一个记号,以后利用这个记号就可以很容易的找到这个存储空间里存放的数据. 一, 变量的基础知识 变量表示内存中一个存储空间 该存储空间的名称就是变量名 申请变量就是申请一个内存的存储空间 申请变量也就是申请内存的存储空间,申请的时候应该指名该存储空间的名称(变量名)以及该存储空间是用来存放什么数据类型(变量的数据类型)的,因为不同的数据类型需要的内存大小不一样,比如申请一个8位的整数的存储空间只需要一个字节,而申请一个64位的整数的存储空间需要8个字节. 申请的存储空间的名称就是变量名,申请存储空间用来存放的数据类型就是变量的数据类型 二,变量的分类 基本数据类型: 数值型 整数类:...阅读全文

博文 2020-01-22 17:32:45 瓦灯_c6f0

深入浅出Rust Future - Part 2

译自Rust futures: an uneducated, short and hopefully not boring tutorial - Part 2时间:2018-12-03,译者:motecshine, 简介:motecshine 欢迎向Rust中文社区投稿,投稿地址 ,好文将在以下地方直接展示 Rust中文社区首页 Rust中文社区Rust文章栏目 知乎专栏Rust语言 sf.gg专栏Rust语言 微博Rustlang-cn Intro 在这个系列的第一篇文章我们了解了如何使用Rust Future.但是只有我们彻底的了解Future并且操作得当才能发挥它真正的作用。这个系列的第二篇文章,我们将介绍如何避免Future里常见的陷阱。 Error troubles 我们将Futu...阅读全文

学会容器服务帮你打造Docker云端最佳运行环境

课程介绍 容器服务提供高性能可伸缩的容器应用管理服务,支持用Docker容器进行应用生命周期管理,提供多种应用发布方式和持续交付能力并支持微服务架构。容器服务简化了容器管理集群的搭建工作,整合了阿里云虚拟化、存储、网络和安全能力,打造Docker云端最佳运行环境。 产品详情:https://www.aliyun.com/product/containerservice 课时列表 • 课时1:如何快速搭建WordPress应用 • 课时2:如何基于Jenkins实现DevOps • 课时3:如何实现深度学习模型开发 • 课时4:如何做深度学习模型开发 • 课时5:如何运行TensorFlow分布式训练 开始学习:http://click.a...阅读全文

GO语言-GC

引言 垃圾回收机制是高级语言常见的一类内存资源管理方式,C/C++这类语言内存分配及回收很大的主动权在调用者,gc机制较弱;像JAVA、PYTHON及后来的GOLANG都添加了GC机制来减少编程人员的内存管理压力。但于此同时也带来了gc效率问题,接下来我们看下常见的GC方式。GC算法 常见GC方式有引用计数(reference counting)、标记-清除(mark & sweep)、节点复制(Copying Garbage Collection),分代收集(Generational Garbage Collection)。 引用计数 引用计数算是在gc算法中最简单,也是最直接的gc算法。引用计数是在对象赋值操作时进行额外的清除操作,赋值时减少右值对象所有域的引用计数,计数为0立即进行垃圾...阅读全文

博文 2019-07-26 01:32:46 木工007

go-graphql 自定义 Scalar

学习笔记,写这篇笔记时才刚入门golang,希望各路大神多多指点。 场景 假设有一个 Role 模型 type Role struct { Id int Name string Status RoleStatus } 其中RoleStatus类型表示角色的状态: type RoleStatus int const ( RDefault RoleStatus = iota RPublish RBlock RDeleted ) 所以数据库在存储角色状态时是Int型,而使用graphql开发接口想以string类型输出状态 的名称,此时就可以利用自定义Scalar功能。 下面这个map用于存储状态名称值和RoleStatus之间的映射: type RSMapType map[interface{}...阅读全文

博文 2019-07-13 17:32:40 SasukeBo

【golang】性能优化

内存管理 在栈中创建对象比在堆中创建对象性能高,少用new来创建对象,多用object{}创建,如果需要创建大量相同临时对象,使用sync.pool减少gc压力。 原因:因为heap上的变量需要gc,而stack上的自动释放,如果在函数里面创建许多生命周期很短的heap变量,会不断触发gc...阅读全文

博文 2020-04-16 03:32:42 dongzaidong

docker总体架构

是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g) 重要概念 image镜像 docker镜像就是一个只读模板,比如,一个镜像可以包含一个完整的centos,里面仅安装apache或用户的其他应用,镜像可以用来创建docker容器,另外docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下周一个已经做好的镜像来直接使用 container容器 docker利用容器来运行应用,容器是从镜像创建的运行实例,它可以被启动,开始、停止、删除、每个容器都是互相隔离的,保证安全的平台,...阅读全文

博文 2019-08-20 22:02:46 蕴重Liu

时序数据库 InfluxDB(四)

相关文章:时序数据库 InfluxDB(一)时序数据库 InfluxDB(二)时序数据库 InfluxDB(三)时序数据库 InfluxDB(四)时序数据库 InfluxDB(五)时序数据库 InfluxDB(六) 存储引擎 InfluxDB 数据的写入如下图所示: 所有数据先写入到 WAL( Write Ahead Log )预写日志文件,并同步到 Cache 缓存中,当 Cache 缓存的数据达到了一定的大小,或者达到一定的时间间隔之后,数据会被写入到 TSM 文件中。 为了更高效的存储大量数据,存储引擎会将数据进行压缩处理,压缩的输入和输出都是 TSM 文件,因此为了以原子方式替换以及删除 TSM 文件,存储引擎由 FileStore 负责调节对所有 TSM 文件的访问权限。 Comp...阅读全文

Goroutines的生命周期

文: A complete journey with Goroutines 在Golang中如果我们想并发的处理事情,我们使用Goroutines。 但是什么是并发呢? 这儿有个例子:我正在写这篇文章突然感到口渴 ,我将停止打字然后去喝水,然后我将继续开始打字。现在,我通过时间切片的方式同时处理了2件事情(打字和喝水),这就被说成是并发工作。这里需要指明的是这两件任务(写字和喝水)不是在同一时间被处理的 。如果事情是在同一时间被处理的,那么它们就被叫做并行(例如一边玩你的手机一边吃薯片)。 因此并发是同时处理多件事情(没有必要在相同的时间做...阅读全文

博文 2020-01-21 23:32:40 小秀秀better

Rust学习笔记4 面向对象编程

github地址:https://github.com/bradyjoestar/rustnotes pdf下载链接:https://github.com/bradyjoestar/rustnotes/blob/master/Rust%E8%AF%AD%E8%A8%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0.pdf 参考: https://rustcc.gitbooks.io/rustprimer/content/ 《RustPrimer》 https://kaisery.github.io/trpl-zh-cn/ 《Rust程序设计语言-简体中文版》 4.1 面向对象数据结构 4.1.1 元祖 元祖表示一个大小、类型固定的有序数据组。 let y = (2...阅读全文

博文 2019-07-05 19:32:51 bradyjoestar

闭包的思想

思考一个问题: 如何能够在运行的时候控制或者改变一个函数对于输入的行为? 比如在一个函数外部修改一个变量就能改变这个函数的行为? 于是一个称之为闭包的东西出现了。 闭包:函数和引用的外部变量一起构成一个闭包。 ✳注意:如果没有上述目的,不要引用函数外部的变量。把它作为参数传入你的函数。否则你很有可能因此引入意想不到的bug。 如何实现闭包? 下面是golang的实现 以下引自https://hitzhangjie.github.io/jekyll/update/2018/05/19/golang-function-closure%E5%AE%9E%E7%8E%B0%E6%9C%BA%E5%88%B6.html 假如闭包定义后立即被调用 因为只会被使用一次,所以应该力图避免闭包对象的内存分配操...阅读全文

博文 2019-07-12 18:32:40 doob_9117

Go Web编程--SecureCookie实现客户端Session管理

在Web应用开发中Session是在用户和服务器之间进行交换的非持久化交互信息。当用户登录时,可以在用户和服务器之间生成Session,然后来回交换数据,并在用户登出时销毁Session。gorilla/sessions软件包提供了易于使用的Go语言Session实现。该软件包提供了两种不同的实现。第一个是文件系统存储,它将每个会话存储在服务器的文件系统中。另一个是Cookie存储,它使用我们上篇文章讲的SecureCookie在客户端上存储会话。同时还提供了用户自定义Session存储实现的选项,我们可以根据应用的需求自己实现Session存储。因为我们的教程是学会使用为目的就不大费周章的去实现MySQL或者Redis版本的Session存储了,我们直接使用软件包提供的Cookie实现来完...阅读全文

博文 2020-03-12 09:32:42 Kevin

DAY1 GOLANG(一)变量

先定义再赋值第一种 var i int (var +变量名+变量类型)第二种 (类型推导) var num =10.11第三种 (快速定义并赋值) 省略var,但是必须加 " : " , name : = "tom"等价于 var name string / name = “tom”多变量赋值及赋值var n1,n2,n3 int 或var n1, n2, n3 = "a" , 20 , 988全局变量:在函数外定义的变量 数据值可以再同一类型范围内不断变化加号的使用:数值型则相加,字符型则拼接 浮点(float32 float64):float64 保存精度高字符型:使用比byte来保存单个字符:结构体(struct):相当于类(class)管道(channel):用于多并发切片(slic...阅读全文

博文 2019-10-25 20:32:45 aside section._1OhGeD

taskpool 协程池

#### 1. 介绍 * 支持预分配协程和用多少申请多少 * 分配的协程都有一个生命周期,生命周期到了会被自动回收 * 协程池最少有一个哨兵协程,最多有 maxWork + 1(哨兵) * 协程池会自己释放, 不需要手动释放 #### 2. 使用 ``` pushPool := lib.NewTaskPool("poolName", 10, lib.WithProGoWorker()) defer pushPool.Close() everyTaskHandleSum := 500 l := 50000 pushIds := []string{xxx} totalPage := mat...阅读全文

[易学易懂系列|rustlang语言|零基础|快速入门|(5)]

[易学易懂系列|rustlang语言|零基础|快速入门|(5)](https://www.cnblogs.com/gyc567/p/11910818.html) Lifetimes 我们继续谈谈生命周期(lifttime),我们还是拿代码来说话: fn main() { let mut a = vec![1, 2, 3]; let b = &mut a; // &mut borrow of `a` starts here // some code println!("{:?}", a); // trying to access `a` as a shared borrow, so giving an error } // &mut borrow of `a` ends here 我们在上篇文...阅读全文

【Go语言踩坑系列(二)】字符串

声明 本系列文章并不会停留在Go语言的语法层面,更关注语言特性、学习和使用中出现的问题以及引起的一些思考。 要点 本文关注Go语言字符串相关的语言特性、以及相关的[]byte、[]rune数据类型。 从字符编码说起 ASCII 计算机是为人类服务的,我们自然有表示我们人类所有语言与符号的需求。由于计算机底层实现全部为二进制,为了用计算机表示并存储人类文明所有的符号,我们需要构造一个“符号” => “唯一编码”的映射表,且这个编码能够用二进制来表示。这样就实现了用计算机来表示人类的文字与符号。最早的映射表叫做ASCII码表,如:a => 97。这个相信大家都很熟悉了,它是由美国人发明的,自然首先需要满足容纳所有英文字符的需求,所以并没有考虑其他国家的语言与符号要如何用计算机来表示。但是随着计算...阅读全文

作为云计算 2.0 时代的里程碑,云数据库PolarDB 还需要做什么?

随着用户、业务和数据的增长,由于I/O瓶颈(存储和网络)导致的备份、性能、迁移、升级、只读实例、磁盘容量、Binlog延迟等相关问题渐渐显现;过多数据库存储引擎的类型导致的工程效率以及运维成本显著上升,最好有一种通用的产品技术架构能兼顾不同用户场景的需求。针对以上关系型数据库在云托管环境逐渐暴露出一些问题,阿里云将在9月下旬推出自研通用云数据库PolarDB,是国内首个能从根本解决两大痛点的关键里程碑产品。 阿里云PolarDB是国内首个自主研发的通用云数据库,它拥有商业数据库一样的性能,但价格仅为前者的1/10,进一步降低用户的上云成本,大幅度提升OLTP性能,满足用户在业务连续性、在线业务扩展能力、数据安全上的需求,将彻底颠覆商业数据库的暴利时代。 在产品架构上放弃了通用分布...阅读全文

(转) golang 垃圾回收 gc

(转载自)https://www.cnblogs.com/diegodu/p/5606937.html 什么是垃圾回收?   曾几何时,内存管理是程序员开发应用的一大难题。传统的系统级编程语言(主要指C/C++)中,程序员必须对内存小心的进行管理操作,控制内存的申请及释放。稍有不慎,就可能产生内存泄露问题,这种问题不易发现并且难以定位,一直成为困扰开发者的噩梦。如何解决这个头疼的问题呢?过去一般采用两种方法: 内存泄露检测工具。这这种工具的原理一般是静态代码扫描,通过扫描程序检测可能出现内存泄露的代码段。然而检测工具难免有疏漏和不足,只能起到辅助作用。 智能指针。这是C++中引入的自动内存管理方法,通过拥有自动内存管理功能的指针对象来引用对象,使程序员不用太关注内存的释放,而达到内存自动释放...阅读全文

博文 2019-03-15 18:34:41 one_zheng

深度性能测试:功能决定现在,性能决定未来!

摘要: 深度性能测试能协助测试人员发现APP中存在的深层次性能问题,直接定位多项性能问题及瓶颈的根本原因,方便开发者快速提升APP性能表现,使得APP运行得更加稳定。MQC深度性能测试能够帮助开发者发现深层次的性能问题,更精准地定位问题。 功能决定现在,性能决定未来! 一、 内存泄漏   内存泄漏是指由于代码编写不当导致不再使用的对象无法得到及时释放。内存泄漏产生的内存垃圾不仅浪费资源,拖慢运行效率,甚至还可能造成内存溢出,直接导致应用崩溃。    对于Android应用,比较容易发生泄漏的是Activity、Fragment对象,此类对象的共性是其都有一定的生命周期。以Activity为例,一个Activity实例的生命起始于onCreate(),终结于onDestroy()...阅读全文

GO的第一天,声明和变量

其实之前有自学过go的基础,但是时隔蛮久的,然后也没有去经常性的使用,现在重头开始学习啦 声明 声明语句定义了程序的各种实体对象以及部分或全部的属性。Go语言主要有四种类型的声明语句:变量(var)、常量(const)、类型(type)和函数(func)实体对象的声明。一个Go语言编写的程序对应一个或多个以.go为文件后缀名的源文件中。每个源文件编写顺序是 说明该源文件是属于哪个包。 package main 包声明语句之后是import语句导入依赖的其它包 import "fmt" 然后是包一级的类型、变量、常量、函数的声明语句,包一级的各种类型的声明语句的顺序无关紧要 var x, y int const pi = 3.14 func sayhi(){ fmt.Println("Hell...阅读全文

博文 2020-03-06 00:32:41 Mr_J

图解kubernetes Pod生命周期事件生成器

PLEG(PodLifecycleEventGenerator)主要是用于周期性检测Pod的运行状态,从而对比Pod前后状态生成事件从而触发kubelet进行Pod容器状态的校证,让我们一起来初探下其内部实现机制 1. 图解设计 1.1 Pod事件生成 Pod事件生成主要是根据对应Pod前后的状态对比来实现,首先通过runtime来获取当前节点的所有Pod的列表,并将对应的状态进行保存,这样在下一个轮训周期就可以通过前后状态的对比去发现状态发生改变的Pod的容器,并且产生对应的事件 1.2 事件通知与状态同步 Pod事件生成之后会通过管道将对应的事件同步给状态同步线程,状态同步线程感知到Pod的变更事件后,会与Pod的目标状态进行对比同步,并调用Runtime来进行最终校证操作的执行,同时在...阅读全文

博文 2020-02-21 15:34:32 8小时_2020

排序(二)

归并排序 归并排序使用分治思想,分支算法一般都是用递归来实现的。 归并排序是一个稳定的排序算法,在merge过程中可以保证值相同的元素在合并前后顺序不变; 归并排序的时间复杂度是O(nlogn),他的执行效率和排序的原始数组的有序成都是无关的,任何情况的时间复杂度都是O(nlogn) 但是归并排序在合并的时候需要借助额外的存储空间,空间复杂度为O(n),所以不是原地排序算法; 快速排序 如果快排的partition函数不使用额外内存空间来进行,则可以做到原地排序; 快排是不稳定的; 虽然快速排序最坏情况的时间复杂度是O(n2),但是平均时间复杂度为O(nlogn),而且最坏情况的概率很小,可以通过合理地选择pivot来避免这种情况; 代码实现(Golang) type Sort struct...阅读全文

博文 2019-12-23 01:32:53 元气蛋蛋

学会容器服务帮你打造Docker云端最佳运行环境

课程介绍 容器服务提供高性能可伸缩的容器应用管理服务,支持用Docker容器进行应用生命周期管理,提供多种应用发布方式和持续交付能力并支持微服务架构。容器服务简化了容器管理集群的搭建工作,整合了阿里云虚拟化、存储、网络和安全能力,打造Docker云端最佳运行环境。 产品详情:https://www.aliyun.com/product/containerservice 课时列表 • 课时1:如何快速搭建WordPress应用 • 课时2:如何基于Jenkins实现DevOps • 课时3:如何实现深度学习模型开发 • 课时4:如何做深度学习模型开发 • 课时5:如何运行TensorFlow分布式训练 开始学习:http://click.a...阅读全文

图解kubernetes Kubelet驱逐管理关键实现

驱逐管理是kubelet自我保护的一种机制,当资源缺乏的时候,通过阈值和策略主动驱逐部分的Pod从而保持系统的资源水位在一个合理的范围内,本身的策略官方文档上已经写的很详细,今天只是看下其在代码上的一些设计 1. 设计臆测 1.1 驱逐总体流程 驱逐总体流程主要是通过获取当前使用资源的统计信息和当前活跃的Pod容器列表,然后结合资源阈值来决策是否需要进行Pod的驱逐 1.2 基于观察者模式的观测 在驱逐管理器中基于观察者模式实现对特殊资源驱逐管理的支持,比如内存资源,在某些情况下即时当前的资源水位没有达到阈值,也可能会触发oom killer这个时候,对应的ThresholdNotifier也会尝试进行状态同步,从而确定是否要主动的驱逐一些节点, 目前这个特性应该还没开, 同理如果这个资源有...阅读全文

图解kubernetes Pod生命周期事件生成器

PLEG(PodLifecycleEventGenerator)主要是用于周期性检测Pod的运行状态,从而对比Pod前后状态生成事件从而触发kubelet进行Pod容器状态的校证,让我们一起来初探下其内部实现机制 1. 图解设计 1.1 Pod事件生成 Pod事件生成主要是根据对应Pod前后的状态对比来实现,首先通过runtime来获取当前节点的所有Pod的列表,并将对应的状态进行保存,这样在下一个轮训周期就可以通过前后状态的对比去发现状态发生改变的Pod的容器,并且产生对应的事件 1.2 事件通知与状态同步 Pod事件生成之后会通过管道将对应的事件同步给状态同步线程,状态同步线程感知到Pod的变更事件后,会与Pod的目标状态进行对比同步,并调用Runtime来进行最终校证操作的执行,同时在...阅读全文