
golang
Mr_Fogg
嘿嘿嘿
展开
-
Goroutine调度分析(三)
上一篇文章中,大致讲了goroutine的C代码数据结构以及大致的调度策略,但是其实上一篇所提到的知识一开始go的设计,还有许多性能上的缺点。高吞吐量的其服务器以及并行运算,显示14%的的时间用在了runtime.futex()。scheduler 的问题一个全局的互斥锁和集中的状态。互斥锁保护goroutine的操作。Goroutine hand-off。工作线程经常之间传递runnable翻译 2017-10-02 17:16:45 · 711 阅读 · 0 评论 -
Goroutine的调度分析(二)
Go 是用C写的,对于Gorutime,主要有三个数据将结构(其实是4个,后面会讲)支持着goruntime记录着所有的信息以及调度。G G数据结构代表一个goroutine。他保存着goroutine的栈和当前的状态。当然也保存着它将要运行的code的一些相关信息。如下图所示 M M数据结构代表系统线程,它有保存全局goroutine队列的指针,当前运行G的指针,它自己的cache.SCHE翻译 2017-10-02 14:26:44 · 444 阅读 · 0 评论 -
Goroutine的调度分析(一)
golang这个新兴的语言,最关键的就在于goroutine,而goroutine的调度又是golang的核心。可以说,没有goroutine,那么这个语言就会毫无意义,没有发明的必要。为了能够更好的写出高质量的代码,最近学习了goroutine的调度,收获良多。写篇文章总结记录一下。我的参考资料Analysis of the Go runtime scheduler 一篇分析goroutine的论原创 2017-09-24 23:46:39 · 927 阅读 · 0 评论 -
golang--lru算法实现
package lruimport "container/list"// Cache is an LRU cache. It is not safe for concurrent access.type Cache struct { // MaxEntries is the maximum number of cache entries before // an item is e原创 2017-08-28 10:31:48 · 1213 阅读 · 0 评论 -
golang--net/rpc
用这个这个包,我们可以通过网络或者其他I/O的连接来访问其他机器上的方法。一个服务器可以注册一个对象,然后其他机器就可以用对象的类型名来远程调用这个对象的方法。当然这些可以被远程调用的方法需要一些限制:-the method’s type is exported. - the method is exported. - the method has two arguments, both e原创 2017-08-26 22:13:33 · 461 阅读 · 0 评论 -
golang开源项目列表
https://github.com/gin-gonic/gin 一个好用web框架原创 2017-08-22 14:25:50 · 1155 阅读 · 0 评论 -
golang --嵌套括号匹配
用一个整型count作为栈 func getContentInKH(str string, startIndex int) string { buf := bytes.NewBufferString(“”) var count int = 0 for i := startIndex; i < len(str); i++ { if str[i] ==原创 2017-08-15 11:02:02 · 1601 阅读 · 0 评论 -
一个goroutine通知另一个goroutine结束任务
package mainimport ( “fmt” “strconv” “sync” )var ( msg chan string signal chan bool )func main() { signal = make(chan bool) msg = make(chan string) var wg s原创 2017-08-14 23:12:13 · 877 阅读 · 0 评论 -
控制并发数量
package mainimport “fmt”func main() { c := make(chan int ,10)for i:=0; i<10000;i++{ c <- 1 go func() { fmt.Println(i) <- c }()}}原创 2017-08-21 18:46:07 · 690 阅读 · 0 评论 -
代码提交问题总结
包的规范引入的包分为三个部分:系统包、自己的包、以及第三方外部包 更新数据库能更新单个字段就不要upsert注意检查程序有没有引用其他项目的包,这是IDE的弊端原创 2017-08-15 10:02:20 · 855 阅读 · 0 评论 -
管道控制循环退出
package mainimport ( “fmt” “os” “os/signal” “syscall” )var ( stop chan bool )func main() { stop = make(chan bool) go run() WaitForExitSign() close(stop)原创 2017-08-16 17:33:42 · 470 阅读 · 0 评论 -
基于etcd的分布式定时任务框架
在开发过程中,往往需要系统执行一些定时的任务,例如我们需要将数据进行迁移,又或者需要做一些数据的离线统计工作,这些都需要定时任务来进行处理。传统的方法就是quartz来写个定时任务脚本,然后该机器就会在特定时间执行我们要执行的代码,但是假如这台机器出现故障,那么这个定时任务就不会执行。 项目github:https://github.com/Mrfogg/gojob使用方式如下代码,我的机器已经原创 2017-12-03 22:47:35 · 2629 阅读 · 0 评论