求阙厅

春有百花秋有月,夏有凉风冬有雪。若无闲事挂心头,便是人间好时节。

Elasticsearch 系列 概述

ElasticSearch 作为一个基于 Apache Lucene 的分布式、可扩展、实时的搜索与数据分析引擎,具有十分强大的功能: 全文搜索——相关性得分—–自动排序 实时搜索 分析与聚合 通过 ES 可以很方便的使大量数据具有搜索、分析和探索的能力。ES出色的性能也让其备受各类公司的喜爱,譬如WikiPedia,StackOverflow以及Github。 同时Elast...

Go 系列 Mutex深入解析

源码详解 Mutex 的结构体很简单,存在两个字段:state(状态),sema(信号量)。 1 2 3 4 5 6 7 8 9 10 11 12 13 type Mutex struct { state int32 // 状态 sema uint32 // 信号量 } // 下文代码中用到的几个常量 const ( mutexLocked = 1 << iota...

Go 系列 并发编程

Go 中的 goroutine 之间没有父与子的关系,也就没有所谓子进程退出后的通知机制。多个 goroutine 都是平行地被调度,多个 goroutine 如何协作工作涉及通信、同步、通知和退出四个方面。 通信:chan 通道当然是 goroutine 之间通信的基础(这里的通信是指程序的数据通道)。 同步:不带缓冲的 chan 提供一个天然的同步等待机制;...

Go 系列 协程

背景 连接独占线程模式和C10K问题 早期的网络程序链接数目和QPS比较低,一个进程或者线程会处理一个网络请求。 随着技术的发展,互联网不再是单纯的浏览万维网网页,逐渐开始与用户进行交互。而且应用程序的逻辑也变得更复杂:从简单的表单提交到即时通信和在线实时互动。每一个用户都必须与服务器保持TCP连接才能进行实时的数据交互。当进程或者线程由于IO阻塞的时候,操作系统就会进行线程或者进程的切...

Go 系列 协程

goroutine 特点: go 语言层面实现了协程,语言层面上 hook 了阻塞的操作,阻塞操作中实现了协程切换; runtime 实现了 work-stealing 算法,实现协程在不同的线程上切换,M 个协程可以运行在 N 个线程上; 实现了协程的抢占式调度(go1.14之后); goroutine 优点: goroutine 可以在用户空间调度,避免了内核...

Lang 系列 Java vs Go

对 Java 和 Go 这两门编程语言和生态做一些对比,希望能够给大家足够信息进行决策。

Java vs Go的优缺点 语言特性 面向对象:Java是严谨的面向对象编程语言,Go不是。 比如Go不支持抽象类,不支持泛型,在做复杂的领域模型建模时,Go远不如Java方便。 接口:Java中的类必须明确声明实现了某接口,而Go语言中一个类只需要实现接口要求的所有函数,那该类就实现了该接口。在维护较为复杂的大项目时,Java的方式更为...

Go 系列 高效编程

工具 pprof Go 工具pprof 会看 pprof 各个数据指标;火焰图 内存选项: -inuse_space -inuse_objects -alloc_space -alloc_objects http 接口 net/HTTP/p...

IO 系列 C10K问题

解析 IO...

C10K问题的由来 大家都知道互联网的基础就是网络通信,早期的互联网可以说是一个小群体的集合。互联网还不够普及,用户也不多,一台服务器同时在线100个用户估计在当时已经算是大型应用了,所以并不存在什么 C10K 的难题。互联网的爆发期应该是在 www 网站,浏览器,雅虎出现后。最早的互联网称之为 Web1.0,互联网大部分的使用场景是下载一个 HTML 页面,用户在浏览器中查看网页上的信息...

Lang 系列 垃圾收集算法

介绍常见的 GC 算法

GC(Garbage Collection 垃圾回收),是一种自动管理内存的机制。传统的编程语言(C/C++)中,释放无用变量内存空间是程序员手动释放,存在内存泄漏或者释放不该释放内存等问题。为了解决这个问题,后续的语言(java\python\php\golang等)都引入了语言层面的自动内存管理,语言使用者无需对内存进行手动释放,内存释放由虚拟机(virtual machine)或者运行...

Go 系列 Go内存压舱物:利用大块内存降低Go GC的运行频率

本文转载自 Twitch 工程师 Ross Engers 的文章《Go memory ballast: How I learned to stop worrying and love the heap》,这篇文章所用的优化思路很有意思但又分析得非常到位,因此与大家分享。 以下是作者原文。 我非常喜欢能引起巨大影响的少量代码改动。这似乎是显而易见的事情,但请让我解释一下: 这种改动...