进程、线程、轻量级进程、协程和go中的Goroutine

一、进程 操作系统中最核心的概念是进程,分布式系统中最重要的问题是进程间通信。 进程是“程序执行的一个实例” ,担当分配系统资源的实体。进程创建必须分配一个完整的独立地址空间。 进程切换只发生在内核态,两步:1 切换页全局目录以安装一个新的地址空间 2 切换内核态堆栈和硬件上下文。 另一种说法类似:1 保存CPU环境(寄存器值、程序计数器、堆栈指针)2修改内存管理单元MMU的寄存器 3 转换后备缓冲器TLB中的地址转换缓存内容标记为无效。 二、线程 书中的定义:线程是进程的一个执行流,独立执行它...阅读全文

2016-06-02 16:44 tangchuanyang
阅读:1450 评论:0

可视化 Go 语言中的并发

本文作者提供了在 2016 的 GopherCon 上的关于 Go 并发可视化的[主题演讲视频](https://www.youtube.com/watch?v=KyuFeiG3Y60)。 Go 语言一个鲜明的优点就是内置的基于 [CSP](https://en.wikipedia.org/wiki/Communicating_sequential_processes) 的并发实现。Go 可以说是一个为了并发而设计的语言,允许我们使用它构建复杂的并发流水线。但是开发者是否在脑海中想象过不同...阅读全文

2017-12-10 20:32:51 polaris
阅读:6198 评论:6

Go 语言汇编快速入门

在 Go 的源码中包含大量汇编语句,最优秀的示例代码位于 `math/big`, `runtime` 和 `crypto` 这些库中,但是从这里入门的话实在太过于痛苦,这些示例都是着力于系统操作和性能的运行代码。 对于没有经验的 Go 语言爱好者来说,这样会使通过库代码的学习过程遇到很大困难 。这也是撰写本文的原因所在。 Go ASM ( 译者注:ASM 是汇编的简写 ) 是一种被 Go 编译器使用的特殊形式的汇编语言,而且它基于 Plan 9 (译者注:来自贝尔实验室的概念[网络操...阅读全文

2018-04-18 16:13:00 polaris
阅读:8302 评论:1

Goroutine调度器(一):P、M、G关系

在了解Go的运行时的scheduler之前,需要先了解为什么需要它,因为我们可能会想,OS内核不是已经有一个线程scheduler了嘛? 熟悉POSIX API的人都知道,POSIX的方案在很大程度上是对Unix process进场模型的一个逻辑描述和扩展,两者有很多相似的地方。 Thread有自己的信号掩码,CPU affinity等。但是很多特征对于Go程序来说都是累赘。 尤其是context上下文切换的耗时。另一个原因是Go的垃圾回收需要所有的goroutine停止,使得内存在一个一致的状...阅读全文

阅读:2783 评论:0

手把手教你实现一个微信自动回复机器人

RebateBot 返利机器人 项目地址 项目描述 关键词: 返利 微信 阿里妈妈 机器人 跨平台 返利机器人,基于微信建立机器人通道与用户通过聊天快速生成返利链接 利用闲置微信和极小的电脑性能开启24小时无人轮值返利机器人 购物只需要发送链接给机器人,机器人能马上给你回复优惠价格及链接 功能实现 微信机器人 这个模块在这里可以看到最新的代码微信机器人 [x] 消息回调 [x] 自动回复消息 [x] 新增好友回调 [x] 默认同意新增好友 [x] 自动回复(文字,表情) 阿里妈妈 [x] 链接识...阅读全文

2018-08-15 11:35:00 546669204
阅读:5168 评论:0

Golang - 调度剖析【第一部分】

简介 首先,Golang 调度器的设计和实现让我们的 Go 程序在多线程执行时效率更高,性能更好。这要归功于 Go 调度器与操作系统(OS)调度器的协同合作。不过在本篇文章中,多线程 Go 程序在设计和实现上是否与调度器的工作原理完全契合不是重点。重要的是对系统调度器和 Go 调度器,它们是如何正确地设计多线程程序,有一个全面且深入的理解。 本章多数内容将侧重于讨论调度器的高级机制和语义。我将展示一些细节,让你可以通过图像来理解它们是如何工作的,可以让你在写代码时做出更好的决策。因为原理和语义是...阅读全文

阅读:3222 评论:1

Go 语言的 Modules 系统介绍

即将发布的 Go 语言 1.11 版本将会给我们带来对 *modules*(模块)的实验性支持,这是 Go 语言新的一套依赖管理系统。 (译注:很多编程语言中,把 modules 译作「模块」,但由于目前该机制在 Go 语言还没正式发布,因此尚未有非常普及的译法。而类似的 vendor 一词的翻译,大多中文文章都是采取保留英文原文的方式处理,因此本文对 modules 的翻译参考 vendor 的处理:保留英文原文) 前些日子,[我简单地写了一编关于它的文章](https://rob...阅读全文

2018-08-23 18:37:30 Alex-liutao
阅读:8776 评论:14

带入gRPC:基于 CA 的 TLS 证书认证

带入gRPC:基于 CA 的 TLS 证书认证 原文地址:带入gRPC:基于 CA 的 TLS 证书认证项目地址:https://github.com/EDDYCJY/go... 前言 在上一章节中,我们提出了一个问题。就是如何保证证书的可靠性和有效性?你如何确定你 Server、Client 的证书是对的呢? CA 为了保证证书的可靠性和有效性,在这里可引入 CA 颁发的根证书的概念。其遵守 X.509 标准 根证书 根证书(root certificate)是属于根证书颁发机构(CA)的公钥...阅读全文

2018-10-08 22:34:43 煎鱼
阅读:1143 评论:0

go validators用法详解 对struct字段进行参数验证

golang小菜一枚,业务中有对接口struct字段进行参数验证的需求,为了练手,自己造了个go validators验证器的轮子,代码在github,使用的详细方法写到这里,欢迎大大们提出宝贵建议,也希望大家在使用过程遇到问题来这提问 在编写golang接口时,需要对接收到的struct字段内容进行验证,比如 type Student struct { Uid int64 Name string Age int64 Sex string Email string } 我们需要对结构体内的字段进...阅读全文

2018.10.11 23:26* smoke_zl
阅读:7160 评论:2

Go的包管理工具(二):glide

在上一篇文章中介绍了 Go 的环境配置和包管理的几种方式。Go 的包管理是一直是为人诟病之处,从 Go 1.5 引入的 vendor 机制、准官方工具dep,到 Go 1.5 的 go modules,目前为止还没一个简便的解决方案。本文将会介绍 glide glide 是在 vendor 之后出来的。glide 的依赖包信息在 glide.yaml 和 glide.lock 中,前者记录了所有依赖的包,后者记录了依赖包的版本信息 工作原理 Glide 扫描应用程序或库的源代码以确定所需的依赖项...阅读全文

阅读:299 评论:0

go gin框架脚手架(gapp)

go gin框架脚手架(gapp) go gin框架应用脚手架, 帮助你快速搭建golang项目, 采用流行的go gin框架、gorm操作数据库、godotenv加载.env配置文件 名称 是否支持 数据库 支持 日志分割 支持 .env配置 支持 多主题(themes)模板 支持 多版本api 支持 多版本app 支持 gapp使用说明 gapp使用了那些golang第三方库 gapp目录结构 安装gapp gapp配置 运行gapp 示例文件 1. gapp使用了那些第三方库 框架: gi...阅读全文

2019.03.26 21:56* 呵呵wei
阅读:3503 评论:0

实战Go内存泄露

最近解决了我们项目中的一个内存泄露问题,事实再次证明pprof是一个好工具,但掌握好工具的正确用法,才能发挥好工具的威力,不然就算你手里有屠龙刀,也成不了天下第一,本文就是带你用pprof定位内存泄露问题。关于Go的内存泄露有这么一句话不知道你听过没有:10次内存泄露,有9次是goroutine泄露。我所解决的问题,也是goroutine泄露导致的内存泄露,所以这篇文章主要介绍Go程序的goroutine泄露,掌握了如何定位和解决goroutine泄露,就掌握了内存泄露的大部分场景。借鉴饶全成的...阅读全文

2019-05-18 11:09:22 一起学Golang
阅读:9431 评论:1

Golang Module Vs Dep: 支持 & 反对

![img](https://raw.githubusercontent.com/studygolang/gctt-images/master/vgo-module/vgo-modules-dependency-management-golang-blog-hero-1200x630.png) Go 语言有着一个热情的社区。尤其是当涉及推动语言本身及其生态的进步时,这种热情催生出精彩的讨论和许多很棒的想法,但是在前进的方向上发生分歧时,热情也会使社区分裂。比如,关于版本和依赖管理,在今年早...阅读全文

阅读:2257 评论:0

Go 中的垃圾回收:第一部分 - 基础

这是三篇系列文章的第一篇博文,系列文章提供了 Go 中垃圾回收背后的机制和概念的理解。这篇博文主要介绍回收器的基础概念。 三篇系列文章的索引: 1) [Go 中的垃圾回收:第一部分 - 概念](https://studygolang.com/articles/21569) 2) [Go 中的垃圾回收:第二部分 -GC 追踪](https://studygolang.com/articles/21570) 3) 即将诞生 ## 简介 垃圾回收器负责跟踪堆内存分配,释放无...阅读全文

阅读:2034 评论:3

athens

墙太高风太大google的包不让下 最近在用 grpc 的时候从 google.golang.org 上死活下不下来。只能找找骚操作了 代理 通过设置 GOPROXY 通过代理来下载 常用公共代理有 https://gocenter.io 和 https://proxy.golang.org # 本次 go get 使用代理 $ GOPROXY=https://goproxy.io go get google.golang.org/grpc # 设置永久代理 $ export GOPROXY=h...阅读全文

2019.07.01 23:14 阿duang_638a
阅读:846 评论:0

goroutine 可能使程序变慢

## 如何使用 goroutine 才能使你的 CPU 满负载运行呢 下面,我们将会展示一个关于 for 循环的代码,将输入分成几个序列添加到 Goroutines 里面!我敢打赌你之前可能有过几次这种情况,但是每次引入 gorountine 都让你的代码变得更快吗? 下面是一个简单的循环示例,它似乎很容易变成并发代码,但正如我们将看到的,并发版本不仅不会更快,实际上需要花费两倍的时间。 ## 串行循环,我们以一个把索引相加的简单的串行循环作为示例 ```go // S...阅读全文

2019-07-10 21:46:01 dylanpoe
阅读:1456 评论:0

Go 项目的布局

Kyle C. Quest 2017年9月12日 · 5 min 阅读 读过了 [`Tour of Go`](https://tour.golang.org/?source=post_page---------------------------),在 [https://play.golang.org/](https://play.golang.org/?source=post_page---------------------------) 上把玩过,然后你感觉你准备好写一些代码了。很...阅读全文

2019-11-15 00:01:34 zhoudingding
阅读:1113 评论:0