- 博客(28)
- 资源 (1)
- 收藏
- 关注
原创 go语言中的接口实现
type Reader interface { Read(p []byte) (n int, err error)}type MyIoReader struct{ UploadFileSize int UploadeSize *int//这样用是因为Read不能用指针this,要不编译不过 Count int//test (this *MyIoReader...
2019-08-31 18:02:38
955
转载 Go语言并发机制初探
Go语言并发机制初探 Go 语言相比Java等一个很大的优势就是可以方便地编写并发程序。Go 语言内置了 goroutine 机制,使用goroutine可以快速地开发并发程序, 更好的利用多核处理器资源。这篇文章学习 goroutine 的应用及其调度实现。 一、Go语言对并发的支持使用goroutine编程使用 go 关键字用来创建 goroutine 。将go声明放到...
2019-01-18 09:55:43
254
转载 go runtime.Gosched()的作用分析
go runtime.Gosched()的作用分析untime.Gosched()用于让出CPU时间片。这就像跑接力赛,A跑了一会碰到代码runtime.Gosched()就把接力棒交给B了,A歇着了,B继续跑。看代码:package main import ("fmt""runtime") func say(s string) {for i := 0...
2019-01-17 11:27:59
437
转载 golang多核设置
golang多核设置单核执行如果for前面或者中间不延迟,主线程不会让出CPU,导致异步的线程无法执行,从而无法设置flag的值,从而出现死循环实例代码:package mainimport ( "fmt" "runtime" _ "time")var ( flag = false str string)func foo() { flag = tru...
2019-01-17 11:17:01
944
转载 go语言之行--golang核武器goroutine调度原理、channel详解
go语言之行--golang核武器goroutine调度原理、channel详解2018.07.06 21:46 1804浏览一、goroutine简介goroutine是go语言中最为NB的设计,也是其魅力所在,goroutine的本质是协程,是实现并行计算的核心。goroutine使用方式非常的简单,只需使用go关键字即可启动一个协程,并且它是处于异步方式运行,你不需要等它运行完成...
2019-01-17 11:07:39
324
原创 服务注册与发现
consul提供服务注册与健康检查功能,服务使用方可监视对应服务的情况(要启动专用线程),但是没找到对应的使用方式。 只找到一个建康检查的接口(示例:http://localhost:8500/v1/health/service/test_server?passing),通过定时调用该接口可获取健康的服务列表,与之前的相比较,然后做相应工作。 etcd注册服务时可...
2018-12-07 11:04:17
582
原创 python grpc示例
1.环境安装:pip install grpciopip install protobufpip install grpcio-tools2.新建proto文件grpchello.proto,定义接口,内容如下:syntax = "proto3";package grpcDemo;message HelloRequest { string name = 1;}...
2018-12-07 10:29:41
1229
原创 python3相关包安装工具pip
1.首先安装python32.下载pip包3.解压,并运行如下安装:(如果要更新python2的pip,只需将python3换成python即可)sudo python3 setup.py buildsudo python3 setup.py install4.用pip3是安装python3的包,用pip是安装python2的包 ...
2018-12-07 10:03:25
172
原创 数据库相关
数据库的设计:分库分表,内存数据库,主从读写分离,数据库中间件mycat(集成了主从读写分离,分库分表等功能) 数据库优化:sql语句优化,数据库配置优化,索引优化,数据库设计优化 数据库的锁:1.乐观锁,表中增加版本字段,每次更改加1,查的时候先把版本字段查出来,更新的时候加上条件版本字段没变,并将版本字段加1更新2.悲观锁:分共享锁和独占锁,insert, delete, ...
2018-08-09 10:47:44
149
转载 mysql联合索引
mysql联合索引命名规则:表名_字段名1、需要加索引的字段,要在where条件中2、数据量少的字段不需要加索引3、如果where条件中是OR关系,加索引不起作用4、符合最左原则https://segmentfault.com/q/1010000003984016/a-1020000003984281联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个...
2018-08-09 10:41:33
134
转载 Python格式化字符格式化
Python格式化字符 %s %d %f格式 描述%% 百分号标记 #就是输出一个%%c 字符及其ASCII码%s 字符串%d 有符号整数(十进制)%u 无符号整数(十进制)%o 无符号整数(八进制)%x 无符号整数(十六进制)%X 无符号整数(十六进制大写字符)%e 浮点数字(科学计数法)%E 浮点数字(科学计数法,用E代替e)%f 浮点数字(用小数点符号)%g 浮点数字(根据值的大小采用%e或...
2018-07-13 10:33:38
551
原创 go网络框架思路
主协程:负责接收客户端的连接,放至连接通道中去。读协程组:负责从连接通道中取连接,并读到客户端的数据,读完后放至工作数据通道中去。(包含客户端的连接socket和读到的数据)工作协程组:负责从工作数据通道中取数据,做相应工作,比如:网络相关,数据库相关等操作,工作协程组将返回数据准好后放至写数据通道中去。(包含客户端的连接socket和要返回的数据)写协程组:负责从写数据通道中拿写数据,负返回给客...
2018-07-08 13:41:22
503
转载 Linux UDP socket 设置为的非阻塞模式与阻塞模式区别
UDP socket 设置为的非阻塞模式 ?1Len = recvfrom(SocketFD, szRecvBuf, sizeof(szRecvBuf), MSG_DONTWAIT, (struct sockaddr *)&SockAddr,&ScokAddrLen);UDP socket 设置为的阻塞模式 ?1Len = recvfrom(SocketFD, szRecvBuf,...
2018-07-05 20:15:30
5208
转载 Linux编程之PING的实现
Linux编程之PING的实现 PING(Packet InterNet Groper)中文名为因特网包探索器,是用来查看网络上另一个主机系统的网络连接是否正常的一个工具。ping命令的工作原理是:向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把回复报文传回给发送者,这有点象潜水艇声纳系统中使用的发声装置。所以,我们想知道我这台主机能不能和另一台进行通信,我们首先需要确...
2018-06-27 12:02:41
1129
转载 并发无锁环形队列的实现
前面在《Linux内核数据结构kfifo详解》一文中详细解析了 Linux 内核并发无锁环形队列kfifo的原理和实现,kfifo鬼斧神工,博大精深,让人叹为观止,但遗憾的是kfifo为内核提供服务,并未开放出来。剑不试则利钝暗,弓不试则劲挠诬,鹰不试则巧拙惑,马不试则良驽疑,光说不练是不能学到精髓的,下面就动手实现自己的并发无锁队列UnlockQueue(单生产者单消费者)。一、UnlockQ...
2018-06-25 11:20:27
2065
转载 性能优化实战:百万级WebSockets和Go语言
SegmentFault首页问答专栏讲堂发现搜索立即登录免费注册曼托斯 发布于 技术译文 关注专栏2017年09月14日 · 7.9k 人阅读性能优化实战:百万级WebSockets和Go语言 golang go语言 并发 内存 性能优化9翻译原文链接 转帖/转载请注明出处原文链接@medium.com 发表于2017/08/03大家好!我的名字叫Sergey Kamardin。我是来自Mai...
2018-06-22 09:48:15
3126
转载 golang go-sql-drive mysql连接池的实现
golang go-sql-drive mysql连接池的实现golang内部自带了连接池功能,刚开始接触golang的时候不了解这个,还自己搞了一个 sql.Open的对象管理池,真的非常囧啊。sql.Open函数实际上是返回一个连接池对象,不是单个连接。在open的时候并没有去连接数据库,只有在执行query、exce方法的时候才会去实际连接数据库。在一个应用中同样的库连接只需要保存一个sql...
2018-06-21 16:19:31
5648
转载 golang sql连接池的实现解析
golang sql连接池的实现解析golang的”database/sql”是操作数据库时常用的包,这个包定义了一些sql操作的接口,具体的实现还需要不同数据库的实现,mysql比较优秀的一个驱动是:github.com/go-sql-driver/mysql,在接口、驱动的设计上”database/sql”的实现非常优秀,对于类似设计有很多值得我们借鉴的地方,比如beego框架cache的实现...
2018-06-21 16:06:38
943
转载 beego框架之orm的使用
beego框架之orm的使用 最近想项目接触到了用go语言来操作数据库msyql,用到了beego的orm,beego ORM(Object Relational Mapping) 是一个强大的 Go 语言 ORM 框架。它的灵感主要来自 Django ORM 和 SQLAlchemy。功能还是比较强大的。 目前beego-orm支持的数据有: - MySQL:https://github.co...
2018-06-21 16:04:03
3045
转载 go 短连接和长连接 超时处理
go 短连接和长连接 超时处理作为一个可能会和很多Client进行通讯交互的Server,首先要保证的就是整个Server运行状态的稳定性,因此在和Client建立连接通讯的时候,确保连接的及时断开非常重要,否则一旦和多个客户端建立不关闭的长连接,对于服务器资源的占用是很可怕的。因此,我们需要针对可能出现的短连接和长连接,设定不同的限制策略。 针对短连接,我们可以使用golang中的net包...
2018-06-21 15:47:16
3098
转载 tcp长连接处理服务端和客户端处理方式
长连接的处理方式是:Server端收到Client端发来的信息之后,开始心跳计时,在设定时间内如果收到Client发来的消息,则重置计时器,否则计时结束断开连接。Client端,处理方式是:用time.NewTicker创建一个定时器,每间隔一秒发送下当前时间到服务器。服务端代码如下:package main import ( "fmt" "os" "net" ...
2018-06-21 15:45:37
4690
转载 go实现高效tcp服务器(适合短连接)类似fasthttp,长连接的每个连接分配一个协程(标准库中的http)
package mainimport ( "fmt" "net" "os" "time")const ( MAX_CONN_NUM = 10)//服务处理函数,如果处理过程过于复杂,可以启动一定量的协程来做(协程池),//处理完后再发回去通过通道,实现异步处理的方式//echo server Goroutinefunc EchoFunc(conn net.Conn) { defer conn.Cl...
2018-06-21 11:15:05
3116
转载 go读取配置(二)
如何读取配置文件config.gopackage confimport ( "bufio" "io" "os" "strings")func InitConfig(path string) map[string]string { //初始化 myMap := make(map[string]string) //打开文件指定目录,返...
2018-06-14 16:52:06
421
转载 go读取配置(一)
一.配置文件config.txt中的内容如下:[default]path= ./goversion = 1.44 [test]num = 666something = wrong #注释1#fdfdfd = fdfdfd 注释整行refer= refer //注释3二.main.go内容如下($GOPATH+my_test/config/)package mainimport...
2018-06-14 16:48:28
695
转载 go的log(一):Golang 标准库提供的log
go的log(一):Golang 标准库提供的log Golang的标准库提供了log的机制,但是该模块的功能较为简单(看似简单,其实他有他的设计思路)。不过比手写fmt. Printxxx还是强很多的。至少在输出的位置做了线程安全的保护。其官方手册见Golang log (天朝的墙大家懂的)。这里给出一个简单使用的例子:1234567package mainimport ( "log")f...
2018-06-14 15:31:27
320
原创 计算机杂谈
计算机杂谈1.复杂问题简单化。程序要易读、易修改,要体现易扩展性,易维护性,灵活性等特点。2.模块化,遵循高内聚低藕合原则,模块之间的通信简单化。3.在面向过程的语言中体现封装,模块化的是函数,在面向对象的语言中体现封装,模块化的是类。4.协议,这个世界都是在协议中运行,编程即是对协议的实现。5.顺序,分支,循环(递归)这三种结构可以描述世界上任何事物。...
2018-06-14 13:42:11
198
原创 go笔记1
类型:一.基本类型:int, float, double, char, byte等与其它语言基本一致。下面两种特殊:string:字符串类型,与java的string一样,是不可变的,赋值时是深拷贝的。优化时使用[]byte。[n]my_type:数组类型,这个在赋值操作或函数传参(初始化)时是深拷贝的,函数传参时与C/C++中的数组的不一样,C/C++是将数组型形参优化成指针。优化时使用[]my...
2018-06-14 10:38:36
106
minio_test.zip
2019-08-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人