(一)gof 通过Epoll模型管理连接
本项目地址:gof 一个支持百万连接的websocket框架 本文提及的内容包含在:epoll.go 一、Epoll模型处理数据的流程 关于Linux Epoll模型的原理,这里就不在做过多介绍了,在Nginx、Redis等的网络并发模型方面,有诸多的详细解释。 Epoll模型中,应用是监听Epoll的Wait接口,来等待系统的推送,因此,比之select/poll等的实现方式略微复杂。 在整个Epoll模型的实现中,其主要的内容包括: 1、创建一个全局的句柄(以下称为 GlobalFd),并使...阅读全文
创建http service的不同姿势
Golang Golang创建WebServer其实很简单,并不需要象Java一样依赖配置web.xml、不需要写servlet、不需要Tomcat、更不需要Spring这类五花八门的第三方框架,Golang创建WebServer只需要Golang SDK自己足以,在我眼里beego、gin等这类所谓等封装式的框架也是多余的。 1. 最简单方式之一 package main import ( "fmt" "log" "net/http" ) // 这是接口响应和处理函数,从`r`读往`w`里写,...阅读全文
2021-03-06:go中,公共变量是协程安全吗?赋值操作是原子的吗?为什么?
2021-03-06:go中,公共变量是协程安全吗?赋值操作是原子的吗?为什么? 福哥答案2021-03-06: 这是面试中被问到的。实力有限,真正的答案还不知道。我的想法是a=1是原子操作,a=b不是原子操作。实际开发中,不大可能是a=1这种情况,可以说是协程不安全。 答案1:不是协程安全的,赋值非原子操作,需要加锁要么就做原子操作,否则会引起data race。 评论如下:题016_卓熊 7:39:15Go很多操作并没有做太多处理,还是沿用了c。所以公共变量非协程安全,赋值操作是否原子跟变量...阅读全文
2021-03-05:go中,io密集型的应用,比如有很多文件io,磁盘io,网络io,调大GOMA
2021-03-05:go中,io密集型的应用,比如有很多文件io,磁盘io,网络io,调大GOMAXPROCS,会不会对性能有帮助?为什么?福哥答案2021-03-05: 这是面试中被问到的。实力有限,真正的答案还不知道。 答案1:调节这个参数影响的是P的个数,也就影响了M(线程)干活的个数。相当于你可以有更多的执行线程。先以网络io来说,网络io 在golang 里面是异步的,用epoll池做的io复用。每个网络调用其实都是异步的,发数据给到内存,调度权就可以让给其他goroutine了,所...阅读全文
聊聊dapr的Limiter
序本文主要研究一下dapr的LimiterLimiterdapr/pkg/concurrency/limiter.goconst ( // DefaultLimit is the default concurrency limit DefaultLimit = 100 ) // Limiter object type Limiter struct { limit int tickets chan int numInProgress int32 }Limiter定义了limit、tickets、n...阅读全文
GoLang+Elasticsearch 普通分页过滤查询
不多说直接看代码吧封装Search 查询条件过滤search.gofunc Search(param map[string]interface{})(err,data [] elastic.Query){ var query [] elastic.Query elastic.NewDateRangeAggregation() if param["name"]!=nil{ query =append(query,elastic.NewMatchQuery("name", param["name"]...阅读全文
Deep Learning部署TVM Golang运行时Runtime
Deep Learning部署TVM Golang运行时Runtime介绍TVM是一个开放式深度学习编译器堆栈,用于编译从不同框架到CPU,GPU或专用加速器的各种深度学习模型。TVM支持来自Tensorflow,Onnx,Keras,Mxnet,Darknet,CoreML和Caffe2等各种前端的模型编译。TVM编译模块可以部署在LLVM(Javascript或WASM,AMD GPU,ARM或X86),NVidia GPU(CUDA),OpenCL和Metal等后端上。TVM支持编程语言(...阅读全文
golang中map与并发
map与并发 我们都知道golang最大的优势在于对并发场景的处理,那么map遇到并发场景会出现什么情况呢?我们先看一个例子 var wg sync.WaitGroup // var lock sync.Mutex func f1(k int, m map[int]int) { // lock.Lock() m[k] = k * k fmt.Println(k, m[k]) // lock.Unlock() wg.Done() } func main() { square := make(map...阅读全文
Golang+chromedp+goquery 简单爬取动态数据
[TOC] Golang+chromedp+goquery 简单爬取动态数据 兵长: 胖sir,最近一段时间正在使用golang来进行开发项目,慢慢的对golang有了一些了解,突然有一天,我想用golang来实现爬取网站上的数据,例如天气预报,每日一句等等,发现这些网站的数据都是javascript动态生成,苦恼呀,不知道如何才能把网站上的动态数据获取下来,为我所用呀,例如我抓取到动态数据之后发邮件给我哟 胖sir撩撩了自己的长发,温和的对兵长说,小伙子,golang做应用开发效率很快的,当然...阅读全文
Go语言编码规范指导
From:茹姐 https://zhuanlan.zhihu.com/p/63250689 关键字 本规范旨在为日常Go项目开发提供一个代码的规范指导,方便团队形成一个统一的代码风格,提高代码的可读性,规范性和统一性。本规范将从命名规范,注释规范,代码风格和 Go 语言提供的常用的工具这几个方面做一个说明。该规范参考了 go 语言官方代码的风格制定。 一、 命名规范 命名是代码规范中很重要的一部分,统一的命名规则有利于提高的代码的可读性,好的命名仅仅通过命名就可以获取到足够多的信息。 Go在命名...阅读全文
leetcode232 用栈实现队列 golang
解题思路 使用栈模拟队列, 栈的特性:先进后出 队列特性:先进先出。 所以可以使用2个栈,S1 pop的数据放到S2那么我们就可以保证 S2 pop出的数据是先进先出的。 代码里没有保证空指针出错。 这里自定义了一个stack,因为go里没有栈,所以用数组进行了模拟,并把栈的相关方法暴露出来。 代码 // 因为go 没有栈这样的数据结果,所以先实现一个栈出来。 type Stack struct{ A []int } func (s *Stack) Push(x int){ s.A = appe...阅读全文
leetcode503 下一个更大元素 II golang
503. 下一个更大元素 II 解题思路 模拟解法,利用下标优化。 设 A[i]表示数组中下一个大于nums[i]的下标,如果不存在则标记为i。 我们从后向前遍历数组,利用动态规划,所有大于当前下标 current_i 的都已经计算过了。 对于大于 current_i 的下标 j , 如果 nums[j] 大于nums[current_i],则A[i]=j 如果小于,则令 j = A[j],去下一个大于nums[j]的下标。这里有2个case需要处理 如果 j > i && A[j] == j ...阅读全文
数据结构6:栈、队列、堆
6.1 用两个栈实现一个队列 LeetCode No.232 题目描述:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty): 思路: 两个栈一个栈做队头(出元素),另一个栈做队尾(入元素) 每次push只需要push到尾栈 pop时如果头栈为空则将尾栈全部“倒入”头栈,如果头栈不为空取出栈顶元素返回,否则返回失败(此时队列为空)。 示例代码: type MyQueue struct { stack_head []int stack_t...阅读全文
手撸golang 基本数据结构与算法 网页排名/PageRank,随机游走
缘起 最近阅读<<我的第一本算法书>>(【日】石田保辉;宫崎修一) 本系列笔记拟采用golang练习之 网页排名(PageRank/佩奇排名), 随机游走 网页排名(PageRank,也叫作佩奇排名)是一种在搜索网页时对搜索结果进行排序的算法。 网页排名就是利用网页之间的链接结构计算出网页价值的算法。 在网页排名中,链入页面越多的网页,它的重要性也就越高。 假设没有链入页面的网页权重为1。 有链入页面的网页权重是其链入页面的权重之和。 如果一个网页链向多个页面,那么其链向的所有页面将平分它的权重...阅读全文
手撸golang 基本数据结构与算法 网页排名/PageRank,随机游走
缘起最近阅读<<我的第一本算法书>>(【日】石田保辉;宫崎修一)本系列笔记拟采用golang练习之网页排名(PageRank/佩奇排名), 随机游走网页排名(PageRank,也叫作佩奇排名)是一种在搜索网页时对搜索结果进行排序的算法。 网页排名就是利用网页之间的链接结构计算出网页价值的算法。 在网页排名中,链入页面越多的网页,它的重要性也就越高。 假设没有链入页面的网页权重为1。 有链入页面的网页权重是其链入页面的权重之和。 如果一个网页链向多个页面,那么其链向的所有页面将平分它的权重。 在网...阅读全文