golang 实现 epoll 代码解析

在文章之前,我先讲个故事,我有个朋友以前是java程序员,后来转过来做go,当我问他为什么选择go的时候,他跟我说,因为写go就没人说他写的代码low了这只是个段子不要当真。。。 好回归正题 golang 的网络轮循器是如何实现的那,先说明一下 golang 的网络轮循器是做什么的,你的go程序启动的时候会创建一个M去跑我们的系统监测任务代码如下(专栏下面的所有文章都是以go 1.8版本为准): systemstack(func() { newm(sysmon, nil) })...阅读全文

阅读:8555 评论:0

HTTP/2服务端推送

翻译:shihuaping0918@163.com 【译者注:本文需要有一定的HTTP协议知识和浏览器解析页面过程知识】 原文 :https://blog.golang.org/h2push 前言 HTTP/2被设计为解决HTTP/1.x的许多缺陷。当代网页使用了许多资源:HTML、样式表、脚本、图片等等。在HTTP/1.x中这些资源每一个都必须明确地请求。这可能是一个很慢的过程。浏览器从获取HTML开始,然后在它解析和评估页面的时候,增量地获取更多的资源。因为服务器必须等待浏览器做每一个请求,...阅读全文

2017.04.23 22:19* 天一阁图书管理员
阅读:2986 评论:0

Golang服务程序daemon化踩坑记录

之前写习惯了C/CPP,都知道可以使用Linux上的daemon函数来方便的实现守护进程。最近切换到go上,想如法炮制,第一个想到的就是基于cgo直接调用,类似如下代码: //#include<unistd.h> import "C" func Daemon() { C.daemon(1,0) } 上面代码确实可以成功执行,可问题随之而来。测试的时候,我发现使用了上述代码片段的程序,测试时会随机出现程序无限假死的情况,google的大部分结果都说的是golang的Scheduler和Linux的...阅读全文

2018-05-21 01:33:05 WangRichard
阅读:6735 评论:4

Go36-15-指针

指针 之前已经用到过很多次指针了,不过大多数时候是指指针类型及其对应的指针值。这里要讲更为深入的内容。 其他指针 从传统意义上说,指针是一个指向某个确切的内存地址的值。这个内存地址可以是任何数据或代码的起始地址,比如,某个变量、某个字段或某个函数。 uintptr 在Go语言中还有其他几样东西可以代表“指针”。其中最贴近传统意义的当属uintptr类型了。该类型实际上是一个数值类型,也是Go语言内建的数据类型之一。根据当前计算机的计算架构的不同,它可以存储32位或64位的无符号整数,可以代表任何...阅读全文

2019-01-11 10:45:07 骑士救兵
阅读:630 评论:0

三年半Java后端面试经历

经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于开始重拾信心去投了两家之前心水已久的公司。 鹅厂 面试职位:go后端开发工程师,接受从Java转语言 都知道鹅厂是cpp的主战场,而以cpp为背景的工程师大都对os,network这块要求特别高,不像是Java这种偏重业务层的语言,之前面试Java的公司侧重还是在数据结构、网络、框架、数据库和分布式。所以OS这块吃的亏比较大 一面基础技术面 电话面试,随便问了些技术问题,最后还问了个LeetCode里面medium级别的算法题,...阅读全文

2019-01-12 11:34:40 codegoose
阅读:2170 评论:0

Golang 学习笔记九 并发编程 协程 通道

参考 《快学 Go 语言》第 11 课 —— 千军万马跑协程 《快学 Go 语言》第 12 课 —— 通道 let's GoLang(三): Goroutine&Channel 知识回顾 并发编程基础知识一 并发和并行 并发编程基础知识二 线程和进程 并发编程基础知识三 异步,非阻塞和 IO 复用 协程和通道是 Go 语言作为并发编程语言最为重要的特色之一,初学者可以完全将协程理解为线程,但是用起来比线程更加简单,占用的资源也更少。通常在一个进程里启动上万个线程就已经不堪重负,但是 Go 语言允...阅读全文

阅读:924 评论:0

Go关键字--type

友情推广 type type有如下几种用法: 定义结构体 定义接口 类型定义 类型别名 类型查询 定义结构体 结构体是用户自定义的一种抽象的数据结构,golang中struct类似于java语言中的class, 在程序设计中,有着举足轻重的地位。结构体的用法,将会在struct关键字中详细的介绍。下边来看一下定义一个结构体的语法格式: type name struct { Field1 dataType Field2 dataType Field3 dataType } 定义接口 接口相关知识点...阅读全文

2018年04月11日 08:43:45 hzwy23
阅读:1369 评论:1

Kubernetes一键部署利器:kubeadm

Kubernetes一键部署利器:kubeadm 要真正发挥容器技术的实力,你就不能仅仅局限于对 Linux 容器本身的钻研和使用。 这些知识更适合作为你的技术储备,以便在需要的时候可以帮你更快的定位问题,并解决问题。 而更深入的学习容器技术的关键在于,如何使用这些技术来“容器化”你的应用。 比如,我们的应用既可能是 Java Web 和 MySQL 这样的组合,也可能是 Cassandra 这样的分布式系统。而要使用容器把后者运行起来,你单单通过 Docker 把一个 Cassandra 镜像...阅读全文

2019.02.12 22:28 大数据专栏
阅读:2969 评论:0

Golang爬虫全攻略

本文地址:https://www.jianshu.com/p/4e53d4727152 一、简介 Golang诞生已经超过十个年头了,发展得愈发完善,其简单方便的协程并发机制使得其在爬虫领域有着一定的天赋。 首先我们来看一看,Golang相对于Python这个爬虫领域的传统强者,有哪些优点和缺点。 优点: 完善简便的协程并发机制 并发数量大 占用资源少 运行速度更快 部署方便 缺点: 数据处理比较繁琐 成熟工具不是很多 资料较少 实现相同逻辑需要的代码更多 由于Golang本身静态语言的特性,和...阅读全文

2019.05.20 15:46* 王南北丶
阅读:25818 评论:1

go实现压测工具【单台机器100w连接压测实战】

本文介绍压测是什么,解释压测的专属名词,教大家如何压测。介绍市面上的常见压测工具(ab、locust、Jmeter、go实现的压测工具、云压测),对比这些压测工具,教大家如何选择一款适合自己的压测工具,本文还有两个压测实战项目: - 单台机器对HTTP短连接 QPS 1W+ 的压测实战 - 单台机器100W长连接的压测实战 ## 目录 - 1、项目说明 - 1.1 go-stress-testing - 1.2 项目体验 - 2、压测 - 2.1 ...阅读全文

2019-08-31 14:11:58 link1st
阅读:5279 评论:0

Go语言学习——如何实现一个过滤器

1、过滤器使用场景 做业务的时候我们经常要使用过滤器或者拦截器(听这口音就是从Java过来的)。常见的场景如一个HTTP请求,需要经过鉴权过滤器、白名单校验过滤、参数验证过滤器等重重关卡最终拿到数据。 Java使用过滤器很简单。XML时代,只要添加一个过滤器配置再新建一个实现了Filter接口的xxxFilter实现类;Java Configuration时代,只要在xxxConfiguration配置类中声明一个Filter注解,如果想设置Filter的执行顺序,加上Order注解就行了。 J...阅读全文

2019-08-30 00:58 bigdataZJ
阅读:1377 评论:0

Golang 中使用 Slice + 索引 Map 替代 Map 获得性能提升

起因 在我们的多个线上游戏项目中,很多模块和服务为了提高响应速度,都在内存中存放了大量的(缓存)数据以便获得最快的访问速度。 通常情况下,为了使用方便,使用了 go 自身的 map 作为存放容器。当有超过几十万 key 值,并且 map 的 value 是一个复杂的 struct 时,额外引入的 GC 开销是无法忽视的。在 cpu 使用统计图中,我们总是观测到较为规律的短时间峰值。这个峰值在使用 1.3 版本的 go 中显得特别突出(stop the world 问题)。后续版本 go gc 不...阅读全文

阅读:3897 评论:1