04 2020 档案
摘要:title: Golang Map 实现 (四) date: 2020-04-28 18:20:30 tags: golang map 操作,是map 实现中较复杂的逻辑。因为当赋值时,为了减少hash 冲突链的长度过长问题,会做map 的扩容以及数据的迁移。而map 的扩容以及数据的迁移也是关注的
阅读全文
摘要:本文在golang map 数据结构的基础上,学习map 数据是如何访问的。 map 创建示例 在golang 中,访问 map 的方式有两种,例子如下: 第一种方式不判断是否存在key值,直接返回val (可能是空值) 第二种方式会返回一个bool 值,判断是否存在key 键值。(是不是和redi
阅读全文
摘要:本文在golang map 数据结构的基础上,学习一个make 是如何构造的。 map 创建示例 在golang 中,初始化一个map 算是有两种方式。 第一种方式默认不指定map的容量,第二种会指定后续map的容量估计为100,希望在创建的时候把空间就分配好。 当make创建map时,底层做了什么
阅读全文
摘要:本文学习 Golang 的 Map 数据结构,以及map buckets 的数据组织结构。 hash 表是什么 从大学的课本里面,我们学到:hash 表其实就是将key 通过hash算法映射到数组的某个位置,然后把对应的val存放起来。 如果出现了hash冲突(也就是说,不同的key被映射到了相同的
阅读全文
摘要:本文从源码角度学习 golang slice 的创建、扩容,深拷贝的实现。 内部数据结构 slice 仅有三个字段,其中array 是保存数据的部分,len 字段为长度,cap 为容量。 通过下面代码可以输出空slice 的大小: 创建 创建一个slice,其实就是分配内存。cap, len 的设置
阅读全文
摘要:今天,通过一个例子,一方面熟悉trace在自定义范围内的分析,另一方面golang 在协程调度策略上的浅析。 Show Code 首先,代码的功能非常简单,只是启动10个协程,每个协程处理的工作都是一样的,即把0 ... 1000000000 做了sum 运算。 其次,代码中,添加了Task 和 T
阅读全文
摘要:简介 对于绝大部分服务,跟踪刨析是用不到的。但是如果遇到了下面问题,可以不妨一试: 怀疑哪个协程慢了 系统调用有问题 协程调度问题 (chan 交互、互斥锁、信号量等) 怀疑是 gc (Garbage Collect) 影响了服务性能 网络阻塞 等等 坦白的讲,通过跟踪刨析可以看到每个协程在某一时刻
阅读全文
摘要:Python 作为一门解释型语言,又是一种动态类型的语言,其灵活性非常适合编写日常脚本。 一些日常不注重效率的需求可以用 来实现。何况 有足够的开源依赖包供我们使用。 本文主要介绍通过 语言实现对 Excel 和 Word 的操作,以及可能出现的坑。 几种选择 Python 对 Excel,Word
阅读全文
摘要:本文对比试验采用官方包做json map 和struct 编码。 数据构造 map 数据类型为map[string]string , key 长度为10, val 长度为100 struct 定义如下: golang type Object struct { Xvlbzgbaic string Kr
阅读全文
摘要:本文介绍 golang 如何做性能分析。 对服务做了基准性能测试后,如果服务出现问题,可以通过性能分析工具,查出消耗资源的瓶颈,并做针对性的性能优化。 Golang 语言也为我们提供了方便的性能分析工具pprof,方便我们做必要的服务优化。pprof 可以做cpu分析,统计所有调用方法执行的时间片(
阅读全文
摘要:本文介绍golang 如何做基准性能测试。 编写完代码除了跑必要的单元测试外,还需要考虑代码跑起来的性能如何。性能的衡量其实就是程序运行时候进程的内存分配,CPU消耗情况。 golang 语言在提供了功能测试的基础上,提供了丰富的性能测试功能。 SHOW CODE 首先,从一个例子来讲起。 随便写一
阅读全文
摘要:NSQ 的拓扑结构和生产消费端配置 单机模式部署 NSQD 是可以脱离 nsqlookup 做单机部署的。 由于 nsqd 足够轻量,可以把服务部署在消息发布的服务器上,加快 pub 消息的速度,也能兼顾消费端消息的分发 集群模式 NSQD 是一个SPOF的系统,每个服务可以独立部署。当采用集群模式
阅读全文
摘要:nsq\_to\_nsq nsq 作为消息队列,有个优势是nsqd 各节点之间是不关联的,如果一个节点出了问题,仅仅影响该节点下的topic,channel,以及相关的生产者、消费者。 也就是官方说明的特性第一条: no SPOF ( single point of failure 单点故障)。好处
阅读全文
摘要:特性总结 消息投放是不保序的 原因是内存队列、持久化队列、以及重新消费的数据混合在一起消费导致的 多个consumer 订阅同一个channel,消息将随机发送到不同的consumer 上 消息是可靠的 当消息发送出去之后,会进入 队列 当恢复FIN 之后,才会从队列中将消费成功的消息清除 如果客户
阅读全文
摘要:NSQ 消息队列实现消息落地使用的是 FIFO 队列。 实现为 diskqueue , 使用包 ,本文主要对 的实现做介绍。 功能定位 在NSQ 中, diskqueue 是一个实例化的 BackendQueue, 用于 保存在内存中放不下的消息 。使用场景如Topic 队列中的消息,Channel
阅读全文
摘要:nsqlookupd 用于Topic, Channel, Node 三类信息的一致性分发 概要 nsqlookup 知识点总结 功能定位 为node 节点和客户端节点提供一致的topic, channel, node 查询服务 Topic 主题, 和大部分消息队列的含义一致, 消息处理时,将相同主题
阅读全文
摘要:本文对了解的空格分为几个Level,看大家能达到哪个level。 Level1: 半角空格 历史最悠久的空格,在1967年,ASCII 规范中被定义。 空格在 ASCII 中编码为0x20, 占位符为一个半角字符。在日常英文书写和代码编写中使用。 Level2: 全角空格 中文输入中的空格(标准说法
阅读全文
摘要:本文主要介绍 supervisor Event 的功能。 supervisor 作为一个进程管理工具,在 3.0 版本之后,新增了 Event 的高级特性, 主要用于做(进程启动、退出、失败等)事件告警服务。 Event 特性是将监听的服务(listener)注册到supervisord中,当sup
阅读全文
摘要:本文主要介绍 supervisor 对 fastcgi 进程的管理 fastcgi 进程的管理 在php 中,php fpm 有主进程来管理和维护子进程的数量。但是并不是所有的服务都有类似的主进程来做子进程的维护。 在很多其他语言中,有很多比较有名的fastcgi 服务,例如py 的flup, c+
阅读全文

浙公网安备 33010602011771号