编程语言
张忠琳
我就是我 不用在怀疑
展开
-
【GOLANG】goroutine原理
一. 同步并发的原理:进程或线程,系统调度 异步并发的原理:DMA,不经过CPU直接把IO COPY到MEMORY1. GO并发模型的实现原理 操作系统层面,一定是以线程的形态存在的。而操作系统根据资源访问权限的不同,体系架构可分为用户空间和内核空间;内核空间主要操作访问CPU资源、I/O资源、内存资源等硬件资源 用户空间不可以直接访问资源...原创 2015-10-16 14:52:26 · 4747 阅读 · 0 评论 -
【golang 源码分析】内存分配与管理
tcmalloc内存分配器具体策略:全局缓存堆和进程的私有缓存对小容量的内存申请进程的私有缓存,私有缓存不足的时候可以再从全局缓存申请一部分作为私有缓存 对大容量的内存申请则需要从全局缓存中进行申请。而容量界定是32k,缓存的组织方式是一个单链表数组,数组的每个元素是一个单链表,链表中的每个元素具有相同的大小。1. Memory AllocatorGo 内存分配器基于...原创 2017-07-07 09:58:18 · 10047 阅读 · 0 评论 -
【golang】golang redis 的使用
前言 Redis 是一个开源的、使用C语言编写的、基于内存也可持久化的 Key-Value 数据库。 Redis 优势 性能高 – Redis 读速度 110000 次/s,写速度 81000次/s 。 支持的数据类型多 – Redis支持 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型。原创 2017-08-11 16:05:46 · 4880 阅读 · 0 评论 -
【golang】第三方命令行 cli 的使用
引入包 "github.com/urfave/cli"结构体 App 结构体定义了命令行的应用结构,如下很庞大的样子// App is the main structure of a cli application. It is recommended that// an app be creat原创 2017-08-15 14:37:37 · 7205 阅读 · 0 评论 -
【go源码分析】go源码之slice源码分析
Go 语言切片是对数组的抽象。Go 数组的长度不可改变,与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。len() 和 cap() 函数 切片是可索引的,并且可以由 len() 方法获取长度。 切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少。空(nil)切片 一个切片在未初始化之前默认为 nil,长度为 0...原创 2018-11-09 11:20:15 · 3273 阅读 · 0 评论 -
【go源码分析】go源码之channel源码分析
源码路径runtime/chan.goCSP 模型 CSP 模型全称为 communicating sequential processes,CSP 模型由并发执行实体(进程,线程或协程),和消息通道组成,实体之间通过消息通道发送消息channel读写ch := make(chan int)// writech <- x// readx <- ch...原创 2018-11-11 17:14:55 · 4153 阅读 · 0 评论 -
【go源码分析】go源码之list源码分析
本文针对go 1.11版本,路径src/container/list/list.go数据结构Element结构体Value 前驱 后继// Element is an element of a linked list.type Element struct { // Next and previous pointers in the doubly-linked list o...原创 2018-11-08 20:01:12 · 3064 阅读 · 0 评论 -
【go源码分析】go源码之interface源码分析
interface实现原理 类似于C++多态的实现,存在两种interface,一种是带有方法的interface实现(iface struct),一种是不带方法的interface实现(eface struct), iface结构体tab:类似于C++的vptr,tab中包含了对应的方法数组,包含实现该接口的类型元数据 data:实现该接口的类型的实例指针...原创 2019-01-04 13:50:06 · 4203 阅读 · 0 评论 -
【go源码分析】go源码之反射reflect源码分析
1. 反射描述 反射是指能够自描述和自控制,通过采用某种机制来实现对自己行为的描述。Golang语言实现了反射,反射机制就是在运行时动态的调用对象的方法和属性,官方自带的reflect包就是反射相关的 Golang设计的原则中变量包括(type, value)两部分,反射主要与Golang的interface类型相关,只有interface类型才有反射机制,实现路径为s...原创 2019-01-04 16:30:05 · 3273 阅读 · 0 评论 -
【golang】INT_MAX最大值 INT_MIN最小值自定义
golang没有INT_MAX INT_MIN常量值,可以用位操作运算1. 无符号整型uint最小值0,二进制所有位都为0const UINT_MIN uint = 0 最大值的二进制所有位为1const UINT_MAX = ^uint(0)2. 有符号整型int 最大值,根据二进制补码,第一位为0,其余为1...原创 2019-02-08 17:16:25 · 13900 阅读 · 0 评论 -
【golang】go mock单元测试stretchr/testify
assertpackageTheassertpackage provides some helpful methods that allow you to write better test code in Go.Prints friendly, easy to read failure descriptions Allows for very readable code Op...原创 2019-04-03 11:34:37 · 4325 阅读 · 1 评论 -
【c】socket server / client
common.h#include #include #include #include #include #include #include #include #include #define SERVER_PORT 5555#define MAX_BUF 512#define DEBUG_ON 1#define TRUE 1原创 2014-06-29 11:01:46 · 3771 阅读 · 0 评论 -
【python】python 基础教程
一. 列表和元组 (统称序列)1. 列表和元组的区别: 列表可以修改,元组则不能。(列表点各个元素通过逗号分隔,写在放括号中 edward = ['ssss', 42])2. list函数 使用于所有类型点序列,不只是字符串。 ‘’.join(somelist)将一个由字符组成点列表转换为字符串3. 列表方法 方法是一个与某些对象有紧密联系点函数,对原创 2014-03-15 12:35:56 · 3823 阅读 · 0 评论 -
【golang】aws s3 go sdk
aws s3 go sdk 使用引入包"github.com/aws/aws-sdk-go/aws""github.com/aws/aws-sdk-go/aws/credentials""github.com/aws/aws-sdk-go/aws/session""github.com/aws/aws-sdk-go/service/s3"创建 sess原创 2017-08-10 10:50:42 · 9218 阅读 · 0 评论 -
【golang】调优工具 pprof
前言Golang 提供了 pprof 包(runtime/pprof)用lai输出运行时的 profiling 数据,这些数据可被 pprof 工具或者 go tool pprof 使用。通常这样使用 pprof 包:// 定义 flag cpuprofilevar cpuprof = flag.String("cpuprofile", "", "write cpu转载 2017-05-05 10:18:53 · 12661 阅读 · 0 评论 -
【golang】Go 性能优化技巧
一. array与slice对于一些初学者,自知道 Go 里面的 array 以 pass-by-value 方式传递后,就莫名地引起 “恐慌”。外加诸多文章未作说明,就建议用 slice 代替 array,企图避免数据拷贝,提升性能。实际上,此做法有待商榷。某些时候怕会适得其反,倒造成不必要的性能损失。用个简单的示例说明。package mainimport ( "fmt"转载 2017-05-03 09:56:55 · 7562 阅读 · 5 评论 -
【golang 源码分析】第一章 RPC 源码分析
1.1 官方例子首先看看官方给出的使用例子:看看rpc.Register到底做了什么事情!type Args struct { A, B int}func (t *Arith) Multiply(args *Args, reply *int) error { *reply = args.A * args.B return nil原创 2016-10-20 10:54:35 · 6298 阅读 · 0 评论 -
【golang 源码分析】第二章 RPC client源码分析
第二章 RPC client源码分析 rpc客户端的逻辑很简单,将一个个的调用请求序列化后原子的发送给服务器,有一个专门的gorutine等待服务器应答,这goroutine会将收到的每个应答分发给对应的请求,完成了一次rpc调用。client是基于单个socket连接来,靠channel来实现复用连接以及并发的。而临时的调用对象Call都是保存在Client的map中的,对每个c原创 2016-10-21 11:06:48 · 4847 阅读 · 0 评论 -
【golang】Go语言学习-select用法
golang 的 select 的功能和 select, poll, epoll 相似, 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作。示例:ch1 := make (chan int, 1)ch2 := make (chan int, 1)...select {case <-ch1: fmt.Println("ch1 pop one elemen转载 2015-05-22 09:47:12 · 24260 阅读 · 1 评论 -
【golang】http请求代码
func Request(method, baseUrl, path string, body io.Reader) ([]byte, int, error) { client := http.Client{ Transport: &http.Transport{ Dial: func(netw, addr string) (net.Conn, error) { deadlin原创 2015-10-13 16:33:24 · 6866 阅读 · 0 评论 -
【golang】Go语言学习-logger
go-logger 是golang 的日志库 ,基于对golang内置log的封装。用法类似java日志工具包log4j打印日志有5个方法 Debug,Info,Warn, Error ,Fatal 日志级别由低到高设置日志级别的方法为:logger.SetLevel() 如:logger.SetLevel(logger.WARN)则:logger.Debug(...转载 2015-05-22 09:37:48 · 11058 阅读 · 0 评论 -
【golang】Go语言学习-time包
go语言的time包组成time.Duration(时长,耗时)time.Time(时间点)time.C(放时间点的管道)[ Time.C:=make(chan time.Time) ]time包里有2个东西,一个是时间点,另一个是时长 时间点的意思就是“某一刻”,比如 2000年1月1日1点1分1秒 那一刻(后台记录的是unix时间,从1970年开始计算) 时转载 2015-05-22 09:27:03 · 20604 阅读 · 0 评论 -
【golang 配置】gogoprotobuf搭建
在go中使用Google protobuf,有两个可选用的包goprotobuf(go官方出品)和gogoprotobuf。gogoprotobuf是完全兼容google protobuf,它生成大代码质量确实要比goprotobuf高一些。一 安装protobuf: 1 下载protobuf源码:https://github.com/google/protobuf原创 2016-11-10 18:39:17 · 18057 阅读 · 1 评论