首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Golang并发编写初探

进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。...goroutine与线程 可增长的栈 OS线程(操作系统线程)一般都有固定的栈内存(通常为2MB),一个goroutine的栈在其生命周期开始时只有很小的栈(典型情况下2KB),goroutine的栈不是固定的...当一个G长久阻塞在一个M上时,runtime会新建一个M,阻塞G所在的P会把其他的G 挂载在新建的M上。当旧的G阻塞完成或者认为其已经死掉时 回收旧的M。...其一大特点是goroutine的调度是在用户态下完成的, 不涉及内核态与用户态之间的频繁切换,包括内存的分配与释放,都是在用户态维护着一块大的内存池, 不直接调用系统的malloc函数(除非内存池需要改变...接收的 的左侧,发送的 的右侧。

44140
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Golang 编写 MySQL UDF

    一、MySQL UDF 这玩意全称 “MySQL user-definable function”, 从名字就可以看出来叫 “用户定义的方法”; 那么 UDF 到底是干啥的呢?...二、解决方案 由于要检查数据库, 但是实际上审查并不会关注每个表甚至数据库细节; 所以想到最简单的方案就是在读取和写入时通过 UDF 定义一个 SM4 的加密算法把数据动态加密和解密, 关于其他细节这里不做详细说明..., 本文主要阐述如何用 Go 搓一个简单的 UDF 并使用....注意: 从 MySQL 8.0.1 开始 xxx_init 的返回值从 my_bool 变更为 int, 网上很多代码写 my_bool 的会导致无法通过编译; 具体参考 https://bugs.mysql.com...gmsm 库对传入的字段进行简单的 SM4 加密并返回; 在真实环境中需要调用加密机来实现相关加密, 这里只演示直接使用开源库+固定密码.

    21110

    golang开发缓存组件

    代码地址github:cache 花了一天时间看了下实验楼的cache组件,使用golang编写的,收获还是蛮多的,缓存组件的设计其实挺简单的,主要思路或者设计点如下: 全局struct对象:用来做缓存...(基于该struct实现增删改查基本操作) 定时gc功能(其实就是定时删除struct对象中过期的缓存对):刚好用上golang的ticker外加channel控制实现 支持缓存写文件及从文件读缓存:其实就是将这里的...key-value数据通过gob模块进行一次编解码操作 并发读写:上锁(golang支持读写锁,一般使用时在被操作的struct对象里面声明相应的锁,即sync.RWMutex,操作之前先上锁,之后解锁即可...,缓存的key-value类型为Item,其中包含Object类型、Expiration类型,Object类型设计为interface{}就是为了可以缓存任意数据。...这里要使用到golang自带gob包,gob主要用于诸如远程调用等过程的参数编解码,相比json传输而言,大数据量下效率明显占优。

    2.2K00

    【Golang】使用Golang编写Hugo发布器

    博主的博客Garfield-加菲的博客就是通过Hugo自动生成的静态网站,首先强调一点,我喜欢Hugo,它使我能够专注于markdown的编写,其他一切事情都交给Hugo,这也符合我懒的特点。...Hugo 是 Golang 编写的静态网站生成器,速度快,易用,可配置,我也是通过golang的学习,发现了Hugo,它不用依赖一大堆东西,一个二进制文件就可以搞定,简洁。...现在两个主题: 需要两个配置文件config.toml,使用时都得更名为这个config.toml 需要两次执行hugo命令生成静态页面,并分别保存 需要两次不同路径的拷贝 思来想去,**我决定编写一个...**为了延续Hugo的golang血统,所以继续选择go 2.包 2.1 os/exec 主要用于验证hugo命令是否存在于系统环境中 func checkHugo() error { //验证...uploaded successfully. ") } 3.编写命令行工具 由于上面的代码是针对我个人的特殊情况,不具有一定的通用性,属于定制化工具。

    91210

    对缓存的思考【续】——编写高速缓存友好代码

    开篇 上一篇博文对缓存的思考——提高命中率详细介绍了高速缓存的组织结构,并通过实例说详细明了cpu从高速缓存中取数据的过程,对于缓存的工作机制应该有了清晰的认识。...这篇博文就来简单讨论以下对于缓存在实际开发中的应用,这里将告诉你如何让你的程序充分利用该缓存,即如何编写高速缓存友好的代码。 提示:如果高速缓存的运行机制还没有清晰的认识,请参照前面文章。...可见,高效的代码不仅依赖于良好的算法,编写缓存有好代码也很重要。 我们将通过下面的例子来认识这一过程 注:这里假设高速缓存是直接映射的,即每一组只有一行。 ?...这种过程也就是所谓的缓存预热。 高速缓存友好代码 一维数组 上面的讨论我们假设了一种特殊的情况,下面将对如何编写高速缓存友好代码做更加泛化的讨论 先看下面的代码 ?...在缓存角度,要提高程序运行效率,编写缓存友好代码尤为关键,这也是区分程序员层次的一个标准,要求较高,需要你掌握缓存的工作原理,缓存内部的组 织形式,还需要编译相关的知识,前面还有很多知识等值我们去学习,

    1K100

    Golang 语言编写 gRPC 实战项目

    然后,我们创建 service 目录,编写生成的 pb 文件中接口定义的方法。最后,我们创建 grpc 服务器。...编写接口定义的方法 至此,我们开始编写 golang 代码,在 service 目录中创建 go 文件,实现生成的 pb 文件中接口定义的方法。 ......编写 controller 代码,调用 server service 的方法 在 controller 目录中创建 go 文件,编写 controller 方法,并创建客户端,使用创建的客户端调用 server...推荐阅读: Golang 语言 gRPC 到底是什么? Golang 语言中的 defer 怎么使用? Golang 语言怎么使用 net/http 标准库开发 http 应用?...Golang 语言中 map 的键值类型选择,它是并发安全的吗? Golang 语言怎么处理错误?

    3.1K50

    Golang 语言怎么编写测试代码?

    01 介绍 我们使用 Golang 语言开发的项目,怎么保证逻辑正确和性能要求呢?也就是说我们如何测试我们的 Golang 代码呢?...在 Golang 语言中,可以使用标准库 testing 包编写单元测试和基准测试,使用 go test 命令执行单元测试和基准测试的代码。本文我们介绍在 Golang 语言中怎么编写测试代码。...02 命名规范 在 Golang 语言中编写测试代码,需要遵循一些命名规范,包含文件名、包名、函数(方法)名和变量名。...03 编写测试代码 单元测试 所谓单元测试,顾名思义就是对单元进行测试,一般进行测试的单元是一个最小的单元,在 Golang 语言中,最小的单元就是指一个函数或方法。...养成编写测试代码的习惯,不仅可以降低代码逻辑的错误率,而且在多人开发中,还可以提升联调效率和提测通过率。

    2K20

    Golang协程之了解管道的缓存能力

    Golang协程之了解管道的缓存能力 我们之前讲过,当使用make建立管道时,第二个参数为零,就证明这个管道是无缓存能力的管道。只要没人写就永远读不出来,只要没人读就永远写不进去。...如果一个缓冲区大小为3的管道,写入4个值,那么第4个值就写入不了,运行结果是这样的: 写入1 写入2 写入3 下面我们来看一看管道内的元素个数及它的缓存能力吧: package main import...("元素的个数为",len(ch),"缓存能力为",cap(ch)); ch <- 123 fmt.Println("元素的个数为",len(ch),"缓存能力为",cap(ch)); }...运行结果是 元素的个数为 0 缓存能力为 3 元素的个数为 1 缓存能力为 3 元素的个数为 2 缓存能力为 3 元素的个数为 3 缓存能力为 3 fatal error: all goroutines...ch := make(chan int,0) 使用make创建一个管道只能传输同一类型的数据,建立一个管道时需要指定一个数据类型,不允许通过一个管道传输多种类型的数据。

    25220
    领券