golang:一个高性能低精度timer实现

在go自带的timer实现中,采用的是通常的最小堆的方式,具体可以参见这里。 最小堆能够提供很好的定时精度,但是,在实际情况中,我们并不需要这样高精度的定时器,譬如对于一个连接,如果它在2分钟以内没有数据交互,我们就将其删除,2分钟并不需要那么精确,多几秒少几秒都无所谓的。 以前我们单独实现了一个timingwheel,采用的是channel close的方式来处理低精度,超大量timer定时的问题,详见这里。 但是timingwheel只有After接口,远远不能满足实际的需求,于...阅读全文

开源中国博客 2014-05-11 16:30 siddontang

简单客户端服务器模型(C++、python和go语言示例)

工作中用到了C/S模型,所做的也无非是给服务器发数据,但开发阶段会遇到程序自身的回环测试,需要用到简单的服务端以便验证数据发送的正确性。 写软件用C++,跑测试用python,这段时间也刚好看go语言,所以都要有demo。以下三组程序实现的功能相同,这里一起做下总结。 一、C++实现 Boost.Asio是一个跨平台的C++库,它用现代C++方法为网络和底层I/O程序提供了一致的异步I/O模型。 为了跨平台,我用boost库实现,具体如下。 服务端代码: 1 /* 2 File ...阅读全文

博客园 2012-02-14 14:06 MikeZhang

golang的io包

package io import "io" io包提供了对I/O原语的基本接口。本包的基本任务是包装这些原语已有的实现(如os包里的原语),使之成为共享的公共接口,这些公共接口抽象出了泛用的函数并附加了一些相关的原语的操作。 因为这些接口和原语是对底层实现完全不同的低水平操作的包装,除非得到其它方面的通知,客户端不应假设它们是并发执行安全的。 Index Variables type Reader type Writer type ...阅读全文

开源中国博客 2014-08-21 10:21 刘地

[读书笔记] go 语言如何处理系统调用

上一篇博客主要是讲如何避免在高并发下使用太多系统线程或进程,但如果仅仅是减少了线程数,CPU利用率本身没有上来,那么系统的容量很低,那么仍然无法达到高并发的目的。 通常情况下,我们会设置线程数等于CPU数,充分利用CPU就等价于如何让线程一直工作,避免把时间浪费在等待系统调用返回上,从而提高系统容量。 很多 linux 平台下的异步框架都基于 epoll 来设计,但 epoll 本身只支持 fd, 也就是说能很好的支持文件IO以及socket, 但对于其他系统调用则无法处理,在调用时仍然会造成堵...阅读全文

博客园 2011-10-07 22:07 lidaobing

golang的net包

package net import "net" net包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。 虽然本包提供了对网络原语的访问,大部分使用者只需要Dial、Listen和Accept函数提供的基本接口;以及相关的Conn和Listener接口。crypto/tls包提供了相同的接口和类似的Dial和Listen函数。 Dial函数和服务端建立连接: conn, err := net.Dial("tcp", "goo...阅读全文

开源中国博客 2014-08-21 10:13 刘地

go语言中几个有趣的特性以及对go的看法

1.多值返回 在C/C++里面如果需要返回多值,一般是在函数传入指针或者引用,比如 fun(int *a,int *b,int *c),但在go里面,如果需要返回多值,只需要把函数写成这样 1 func test_func()(int,int,int){ 2 a := 1; 3 b := 2; 4 c := 3; 5 6 return a,b,c; 7 } 最后函数会依次返回a,b,c 这个其实在lua中早就有了,所以实际上在go里面也算不上什么新的东西,g...阅读全文

博客园 2013-04-30 22:54 linyilong3

go语言很给力呀

最近因为项目需要,所以写了一个id生成器,于是当时想为了省事就用go语言来写得了,于是花了大概半天的时间写了300多行码,完成之后开始测性能。一开始是在自己的虚拟机上测的,客户端是用php的,结果发现php在单进程环境下只能跑30个请求,这个结果其实也不意外,因为这根本就不是服务器的问题,而是php本身的性能不行,所以压力压不上去。于是用pcntl_fork出多个进程来,每个进程跑一些请求,最后在主进程里计算总的时间,结果发现1s最多处理1000-2000之间,并且随着并发数增多,性能下降很快。...阅读全文

ITEYE博客 2011-05-26 20:27 javatgo

go语言学习笔记一基本变量

通过看goclipse文档终于将环境搭建完成,本笔记是自己学习过程中产生的,用于自己复习和交流,希望大家多多指点: 第一个go程序: package main import ( "fmt" //我们需要使用fmt包中的Printf()函数 ) func main(){ fmt.Printf("hello world for jackLiang") } 其中要点解读: 1、package 表示go代码所属的包 2、要生成GO可执行程序,必须建立一个main()函数(不能代参数,也不能定义返回值...阅读全文

ITEYE博客 2013-02-11 18:31 jacking124

go语言hello.go

前言 运行环境在ubuntu,按照官方网站说明简单安装,在这就不具体说明了,安装过错中没有任何错误。下面我就按照光放网站照这写一个hello.go。 代码如下:   package main import "fmt" func main(){ fmt.Printf("你好,世界") } 运行命令: 6g hello.go 6l hello.6 ./6.out   输出结果:你好,世界   运行一下命令会生成64 位的exe程序: 6l -o hello.exe hello.6 生成的文件大小有1...阅读全文

博客园 2012-03-18 23:18 zitsing

Beego源码分析

beego 是 @astaxie 开发的重量级Go语言Web框架。它有标准的MVC模式,完善的功能模块,和优异的调试和开发模式等特点。并且beego在国内企业用户较多,社区发达和Q群,文档齐全,特别是 @astaxie 本人对bug和issue等回复和代码修复很快,非常敬业。beego框架本身模块众多,无法简单描述所有的功能。我简单阅读了源码,记录一下beego执行过程。官方文档已经图示了beego执行过程图,而我会比较详细的解释beego的源码实现。 注意,本文基于beego 1.1.4 (...阅读全文

开源中国博客 2014-05-01 00:39 傅小黑

go语言学习笔记之并发编程

编译自http://golang.org/doc/effective_go.html#concurrency (翻译错误之处,敬请指正)   1. 通过通讯共享内存(Share by communicating):   Do not communicate by sharing memory; instead, share memory by communicating.   不要通过内存共享进行通讯;应当通过通讯来共享内存。使用信道(channels)来控制变量的访问可以更为容易地编写出清晰、...阅读全文

博客园 2010-05-31 14:57 agateriver

Go语言环境配置 Sublime Text + GoSublime+ gocode + MarGo组合

买来《Go Web编程》一书学习Go语言,结果按照书中的步骤搭建,发现部分站点已经失效了,查了网上好多教程也没有人能够说清楚如何搭建。还是自己动手找方法吧,经过自己的不懈努力终于搭建好了。ps:没有google的日子太难受了,查资料各种不方便,平时基本不FQ,所以。。。。。。 1.下载安装go,今天安装go的时候发现go官网打不开,在网上找各种go下载地址无果,不过还是在不经意间发现了一个下载地址,希望你看到这篇文章时还能下载。我的机器是64位windows8,找个可用的msi太费劲了。附地址 ...阅读全文

博客园 2014-06-16 14:31 luckyliu

怎么学习golang?

来自asta谢分享 http://www.zhihu.com/question/23486344/answer/24770195 我觉得学习一门语言最重要的就是做到三点,第一看基础知识,第二学习抄代码,第三学习写代码 第一点,很多人都觉得上来就动手写,但是你基础的东西都没掌握,怎么写呢?欲速则不达,所以基础的东西还是必须要先掌握好.这里推荐你几个基础的入门材料: http://tour.golang.org/#1 邢星翻译的mikespook/Learning-Go-zh-cn · GitHub...阅读全文

新浪博客 (2014-04-26 11:59:54) xuwuhen

创业实战go语言制作网站(转)

简单介绍一下之前的整个职业生涯,挺典型的,工程师 –> 资深工程师 –> 架构师 –> 项目经理 –> 部门经理,可以说,产品研发过程中的所有角色我都走了一遍,任职的公司也越来越大,可是内心的不安确实与日俱增,总觉得这一身本事渐渐被淹没在了办公室的各种琐碎之中,心中想要做一款好产品的梦想似乎越来越远了。 于是,我打定了主意,要创业。但在这个人生阶段(已结婚、无车、无房),这不是一个容易的决定,有太多的东西会让我顾虑。为了不给自己留后路,一年前我就跟上司说明,我要创业了,请开始物色我的接班人。我还...阅读全文

博客园 2014-01-07 16:57 hubing

【原】Go语言及Web框架Beego环境无脑搭建

本文涉及软件均以截至到2013年10月12日的最新版本为准 1、 相关软件准备: 1) go1.2rc1.windows-386.msi,对应32位windows系统安装使用 下载地址: https://code.google.com/p/go/downloads/detail?name=go1.1.2.windows-386.msi 2) go1.2rc1.windows-amd64.msi,对应32位windows系统安装使用 下载地址: https://code.google.com/p...阅读全文

博客园 2013-10-13 01:17 iflytek

go~漫漫学习路

突然间,回想起了以前的生活,想起了很多的事情,现在回想到的过去都是美好的,都是现在所想念的,人生就是这样,很多东西都要失去后才会懂得珍惜!现在想想现在的生活是不是等到以后又要开始想念了呢?       我决定了每周在这里写一篇雷记录我现在的生活、学习,记录我的点点滴滴。大学真的过的很快,回想起两年前刚到学校时的无目标,真是觉得可惜,大三了,什么都变了,个人的心态变得最厉害了,现在开始珍惜目前的生活了!在为自己的目标忙碌着,心理又有那么一丝丝的害怕,害怕自己学的知识不够。      在人生的道...阅读全文

开源中国博客 2012-03-24 23:25 cheng~ding