- 博客(13)
- 收藏
- 关注
原创 GRPC简单介绍和使用
GRPC简单介绍和使用一、基本介绍 GRPC是一个高性能、通用的开源RPC框架,基于HTTP/2协议标准和Protobuf序列化协议开发,支持众多的开发语言。二、概括 在grpc框架中,客户端可以像调用本地对象一样直接调用位于不同机器的服务端方法,如此我们就可以非常方便的创建一些分布式的应用服务。 在服务端,我们实现了所定义的服务和可供远程调用的方法,运行一个gRPC server 来处理客户端的请求; 在客户端,gRPC实现了一个stub(可以简单理解为一个...
2020-09-06 17:37:22
1186
原创 Go sync包 sync.Pool
Go sync包 sync.Pool Go版本为go1.14可以存或取临时对象集合;可以安全的同时被多线程使用,保证线程安全;sync.Pool中保存的任何项都可能随时不做通知的释放掉,所以不适合用于像socket长连接或数据库连接池;主要用途是增加临时对象的重用率,减少GC负担。sync.Pool 结构 sync.Pool 存取流程图 ...
2020-09-06 17:30:04
184
原创 Golang 3种并发模型
控制并发有三种种经典的方式,一种是通过channel通知实现并发控制 一种是WaitGroup,另外一种就是Context。1. 使用最基本通过channel通知实现并发控制无缓冲通道无缓冲的通道指的是通道的大小为0,也就是说,这种类型的通道在接收前没有能力保存任何值,它要求发送goroutine和接收goroutine同时准备好,才可以完成发送和接收操作。从上面无缓冲的通道定义来看,发送goroutine和接收gouroutine必须是同步的,同时准备后,如果没有同时...
2020-05-18 09:59:31
973
原创 Golang GMP
前言随着服务器硬件迭代升级,配置也越来越高。为充分利用服务器资源,并发编程也变的越来越重要。在开始之前,需要了解一下并发(concurrency)和并行(parallesim)的区别。并发: 逻辑上具有处理多个同时性任务的能力。并行: 物理上同一时刻执行多个并发任务。通常所说的并发编程,也就是说它允许多个任务同时执行,但实际上并不一定在同一时刻被执行。在单核处理器上,通过多线程共享CPU时间片串行执行(并发非并行)。而并行则依赖于多核处理器等物理资源,让多个任务可以实现并行执行(并发且并行)
2020-05-18 09:59:13
435
原创 由浅入深剖析 go channel
channel是golang中最核心的feature之一,因此理解Channel的原理对于学习和使用golang非常重要。channel是goroutine之间通信的一种方式,可以类比成Unix中的进程的通信方式管道。CSP模型在讲channel之前,有必要先提一下CSP模型,传统的并发模型主要分为Actor模型和CSP模型,CSP模型全称为communicating sequential processes,CSP模型由并发执行实体(进程,线...
2020-05-13 14:56:07
252
原创 golang cron 定时任务
cron 用法首先先把第三方库下载下来:$ go get -v -u github.com/robfig/cron我们来看一个小的demo:每隔一秒打印"hello world"package mainimport ( "github.com/robfig/cron" "log")func main() { log.Println("Starting...") c := cron.New() //新建一个定时任务对象 c.AddFunc("...
2020-05-13 14:44:36
982
原创 PV、UV、QPS之间的关系
QPS:每秒查询率(Query Per Second) ,每秒的响应请求数,也即是最大吞吐能力。QPS = req/sec = 请求数/秒QPS统计方式 [一般使用 http_load 进行统计]QPS = 总请求数 / ( 进程总数 * 请求时间 )QPS: 单个进程每秒请求服务器的成功次数峰值QPS:原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间...
2019-11-06 14:37:32
1561
原创 go 类型转换
#string到intint,err:=strconv.Atoi(string)#string到int64int64, err := strconv.ParseInt(string, 10, 64)#int到stringstring:=strconv.Itoa(int)#int64到stringstring:=strconv.FormatInt(int64,10)...
2019-09-27 10:11:03
275
原创 Go的json解析:Marshal与Unmarshal
简介Json(Javascript Object Nanotation)是一种数据交换格式,常用于前后端数据传输。任意一端将数据转换成json 字符串,另一端再将该字符串解析成相应的数据结构,如string类型,strcut对象等。go语言本身为我们提供了json的工具包”encoding/json”。更多的使用方式,可以参考:https://studygolang.com/artic...
2019-09-27 10:06:26
524
原创 php生产环境部署代码后访问的以前的代码
有一次上线,运维部署代码后测试,发现没有新加的功能,访问的还是更新前的功能。上服务器,查看有更新后的代码,为保留上个版本的代码,采用的是每个版本一个文件夹,软链最新的版本为线上版本,进入最新文件夹发现,没有产生任何日志,就推测访问的是上个版本的代码,进入上个版本发现有访问日志,日志文件一般一天产生一次,新的明天才会在新版本产生。找了很久没有找到原因,后来运维屏蔽了服务器访问,重...
2018-09-30 11:34:39
904
1
原创 php excel 导出报错
php版本7.1.12使用yii2的 "moonlandsoft/yii2-phpexcel": "*" 扩展在本地没有问题,到测试环境点击导出会提示:无法访问此网页,已永久性地移动到了新网址网上找了很久没有一个方法可以后修改 使用excel版本好了修改文件:vendor/moonlandsoft/yii2-phpexcel/Excel.php 565行 把Ex...
2018-09-30 11:19:52
682
原创 Ubuntu 安装 RabbitMQ 和PHP扩展
1.ubuntu16.04中安装RabbitMQ1).首先必须要有Erlang环境支持 安装之前要装一些必要的库:sudo apt-get install build-essential sudo apt-get install libncurses5-dev sudo apt-get install libssl-dev sudo apt-get install m4 sudo a
2017-07-13 18:19:16
1848
原创 linux服务器自动切割并清理日志
linux服务器自动切割并清理日志 由于nginx的日志会不停地增大,所以需要我们自己去切割日志,方便管理,需要达到以下的效果:1.按日期自动切割日志,最小单位是天。2.当日志总量超过一定量时,自动直接清理日志,限定总量不能超过1GB。3.写入crontab定时任务里。 分析1.nginx日志目录下分别有access.log和error.log,按照日期自动切割日志则需要将每天的日志以
2017-07-10 17:29:32
598
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅