简答社区

数据说话:Go语言的Switch和Map性能实测

<p>在开发<a href="https://github.com/jackc/pgx" target="_blank" rel="noopener">pgx</a>(一个针对Go语言的PostgreSQL driver)的时候,有好几次我都需要在20多个代码分支间跳转。通常我会选用switch语句。还有个更加可读的实现方法是使用函数map。我一开始认为用switch语句进行分支跳转比一个map查找和函数调用更快。数据库驱动(database driver)的性能是一个很重要的考量,所以在做

性能优化实战:百万级WebSockets和Go语言

<p>大家好!我的名字叫Sergey Kamardin。我是来自<strong>Mail.Ru</strong>的一名工程师。这篇文章将讲述我们是如何用Go语言开发一个高负荷的WebSocket服务。即使你对WebSockets熟悉但对Go语言知之甚少,我还是希望这篇文章里讲到的性能优化的思路和技术对你有所启发。</p> <h2 id="1-介绍">1. 介绍</h2> <p>作为全文的铺垫,我想先讲一下我们为什么要开发这个服务。</p> <p><strong>Mail.Ru</str

用Golang处理每分钟百万级请求

<p>我在防垃圾邮件,防病毒和防恶意软件领域已经工作了15年,前后在好几个公司任职。我知道这些系统最后都会因为要处理海量的数据而变得非常复杂。</p> <p>我现在是<a href="https://smsjunk.com/" target="_blank" rel="noopener">smsjunk.com</a>的CEO并且是<a href="http://knowbe4.com/" target="_blank" rel="noopener">KnowBe4</a>的首席架构师。这

调试Go语言的核心转储(Core Dumps)

<p>检查程序的执行路径和当前状态是非常有用的调试手段。核心文件(core file)包含了一个运行进程的内存转储和状态。它主要是用来作为事后调试程序用的。它也可以被用来查看一个运行中的程序的状态。这两个使用场景使调试文件转储成为一个非常好的诊断手段。我们可以用这个方法来做事后诊断和分析线上的服务(production services)。</p> <p>在这篇文章中,我们将用一个简单的hello world网站服务作为例子。在现实中,我们的程序很容易就会变得很复杂。分析核心转储给我们提供了一

Debugging Go Core Dumps

<p>Debugging is highly useful to examine the execution flow and to understand the current state of a program.</p> <p>Core files is a file that contains the memory dump of a running process and its process status. It is primarily used for post-mortem

Go语言的栈空间管理

<p>在CloudFlare,我们使用Go语言搭建各种服务和应用。在这篇博文里,我们将对Go语言的技术特点进行深度分析。Go语言里最重要的一个特性就是goroutine。它们的开销比较小,相互协作地调度线程来运行。它们有广泛的用途,比如实现超时控制(timeouts),生成器(generators),以及在多个后台应用之间实现相互竞争(racing)。为了使goroutine能够适应更多的任务,我们必须保证每个goroutine占用很少的内存。同时,人们应该可以很方便地创建goroutine。<

Goroutine是如何工作的?

<h2 id="go语言">Go语言</h2> <p>如果你刚刚接触Go语言,或者说你并不理解“并发不等于并行”这句话的含义,那么Rob Pike的<a href="http://www.youtube.com/watch?v=cN_DpYBzKso" target="_blank" rel="noopener">讲座</a>值得一看(在youtube上)。这个视频有30分钟长,我保证花30分钟看这段视频是非常值得的。</p> <p></p> <p>这里摘录一段他提到的并发和并行之间的区别