• 如果裸写一个goroutine pool

    Posted by : lon.y@qq.com on 2017年7月4日

    引言 在上文中,我说到golang的原生http server处理client的connection的时候,每个connection起一个goroutine,这是一个相当粗暴的方法。为了感受更深一点,我们来看一下go的源码。先定义一个最简单的http server如下。 func myHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello there!\n") } fu

    阅读全文...

  • fasthttp 的 goroutine pool 实现探究

    Posted by : lon.y@qq.com on 2017年7月4日

    引言 fasthttp是一个非常优秀的web server框架,号称比官方的net/http快10倍以上。fasthttp用了很多黑魔法。俗话说,源码面前,了无秘密,我们今天通过源码来看一看她的goroutine pool的实现。 热身 fasthttp写server和原生的net/http写法上基本没有区别,这里就不举例子。直接找到入口函数,在根目录下的server.go文件中,我们从函数ListenAndServe()跟踪进去。从端口监听到处理请求的函

    阅读全文...

  • Go语言内幕(6):启动和内存分配初始化

    Posted by : lon.y@qq.com on 2017年7月4日

    《Go语言内幕(1):主要概念与项目结构》 《Go语言内幕(2):深入 Go 编译器》 《Go语言内幕(3):链接器、链接器、重定位》 《Go语言内幕(4):目标文件和函数元数据》 《Go语言内幕(5):运行时启动过程》 本文是 Golang 内部机制探索系列博客的后续。这个系列博客的目的是探索 Go 启动过程,这个过程也是理解 Go 运行时(runtime)的关键之处。本文中我们将一起去看看启动过程的第二个部分,分析参数是怎么被初始化的及其中有哪些函数调

    阅读全文...

  • 为什么Go是一种设计糟糕的编程语言

    Posted by : lon.y@qq.com on 2017年7月4日

    好吧,我承认这个标题有点放肆。我多告诉你一点:我爱肆意妄言的标题,它能够吸引注意力。不管怎样,在这篇博文中我会试图证明 Go 是一个设计得很糟糕的语言(剧透:事实上它是)。我已经摆弄 Go 有几个月了,而且,我想我在六月某个时候运行了第一个 helloworld 程序。虽然我的数学不太好,但在那之后已经有四个月了,并且我的 Github 上已经有了几个 package。不必多说,我仍完全没有在生产中使用 Go 的经验,所以把我说的有关 “编码支持”、“部署

    阅读全文...

  • 一个 Java 程序员眼中的 Go 语言

    Posted by : lon.y@qq.com on 2017年7月4日

    首先,我想做个免责声明,我不是 Go 语言专家。几周前我才开始学习,所以本文是我对 Go 的第一印象。文中我的一些主观看法可能是错的。以后我可能会发文再探讨本文的一些观点。在此之前,先看看本文吧。如果你是一个 Java 开发者,很高兴与你分享我的感受和经历,更期待你的留言评论,如果我有一些错误阐述,请不吝指教。 Go 语言令人印象深刻 不同于 Java,Go 编译生成机器码,并被直接执行,非常类似 C。因为它不是一个虚拟机,这与 Java 有着天壤之别。G

    阅读全文...

  • Go语言内幕(4):目标文件和函数元数据

    Posted by : lon.y@qq.com on 2017年7月4日

    今天,我们来看一下 Func 结构体,还会讨论一些关于 Go 垃圾回收的一些细节。 本文是 《Go语言内幕(3):链接器、链接器、重定位》的后续,我会使用相同的示例程序。因此,如果你没有读过前面这篇博客,我强烈去读一下再来阅读这篇博客。 函数元数据的结构体 重定位背后的原理在本系列的第三部分就已经讲得很清楚了。接下来,我们来看一下 main 方法中的 Func 结构体: Func: &goobj.Func{ Args: 0, Frame: 8, L

    阅读全文...

  • Go语言内幕(3):链接器、链接器、重定位

    Posted by : lon.y@qq.com on 2017年7月4日

    《Go语言内幕(1):主要概念与项目结构》 《Go语言内幕(2):深入 Go 编译器》 本文将会讨论关于 Go 链接器、目标文件(object file)以及重定位(relocation)相关的内容。 为什么要关注这些东西呢?如果你想学习任何一个大项目的内部机制,那么你首先要做的一件事就是学会将其分割成不同的部件或者模块。接下来,你需要搞懂这些模块向外提供的接口。在 Go 中,编译器、链接器与运行时就是这样的高层次模块。编译器与链接器之间的接口就是目标文件

    阅读全文...

  • Unix 哲学:Elixir 将会替代 Go

    Posted by : lon.y@qq.com on 2017年7月4日

    如果你做过Web开发,你可能会觉得我们正处于一个新时代的开端。多年以来我们一直使用像 Django Rails 这些基于Python、Ruby、PHP开发的框架,这些开发语言都是基于老式的“请求-应答周期”模式(request-response cycle),之所以用这个短语是因为找不到更好的专业术语。 这个模式主要是这样的:一个请求从客户端发送到服务端,然后服务端渲染一个HTML页面,接着将这个页面返回给客户端。虽然随着AJAX、JSON和大量内置了客户

    阅读全文...

  • Go语言内幕(2):深入 Go 编译器

    Posted by : lon.y@qq.com on 2017年7月4日

    当你通过接口引用使用一个变量时,你知道 Go 运行时到底做了哪些工作吗?这个问题并不容易回答。这是因为在 Go 中,一个类型实现了一个接口,但是这个类型并没有包含任何对这个接口的引用。与上一篇博客《Go语言内幕(1):主要概念与项目结构》一样,你可以用 Go 编译器的知识来回答这个问题。关于 Go 编译器的内容我们已经在上一篇中已经讨论过一部分了。 在这里,让我们更加深入地探索 Go 编译器:创建一个简单的 Go 程序来看一下 Go 内部在类型转换时到底做

    阅读全文...

  • Go1.5 发布说明

    Posted by : lon.y@qq.com on 2017年7月4日

    Go 1.5 介绍 Go的最新版本是1.5,同时是一个有重大意义的版本,其包括了Go主要架构的变更。尽管如此,我们预计几乎所有的Go程序还是可以像以前一样地编译和运行,因为这次发布仍然保持Go 1时的兼容性承诺。 主要改进是: 编译器和运行时完全用Go重写(带一点汇编)。 C不再参与Go的实现,因此曾是构建分布式程序不可或缺的C编译器,如今已被舍弃。 gc支持并发,显著地降低了运行时的暂停时间,有时甚至可以和其他goroutines同时运行。 Go程序默认

    阅读全文...

  • 1
  • 2(current)
  • 3