Ryo's blog

归档 · 2023

首页

关于

归档

Golang

Golang “锁”事

一、 Go 同步原语 sync.Cond -> notifyList -> runtime.mutex、atomic sync.WaitGroup -> atomic、 runtime.sema sync.Map -> sync.Mutex、atomic sync.Once -> sync.Mutex、atomic sync.RWMutex -> sync.Mutex、atomic sync.Mutex -> runtime.sema channel -> runtime.mutex sync.Mutex和runtime.mutext区别:简单说就是sync.Mutex是用户层的锁,Lock抢锁失败会造成goroutine阻塞(会调用gopark)。run..

更多
Golang

Golang Context 详解

基于 Go 1.18 源码分析 一、引言1.1 什么是 Context?Context是Go 1.7引入的一个标准库,官方 blog 里面介绍,最早是Google内部使用的一个库,主要用于在一个Request对应的多个Goroutine中传递数据,数据主要分为两种: 请求的基本信息,比如用户鉴权信息、请求的Request-ID等等。 请求的Deadline,如果请求被Cancel或者Timeout,能够控制多个Goroutine会返回。 整个 context.go 加上注释也就600行左右。核心就是Context type : type Context interface { // 获取 DeadLine 时间,使用 WithDeadline 和 WithTimeout 才有 Deadl..

更多
Algorithm

牛顿迭代法求开方

求一个数的开平方我们假设这个数是a,如何先快速求出√a的值? 我们可以把这个题目转化成一个几何问题。如下图: 可以转换为,求公式Y = X^2 - a,(√a,0)的值。 我们现在抛物线上任意取一点(x0,x0^2 - a), 然后基于这一点画一个切线,切线的方程记为Y = KX + b。 切线的斜率 K,我们可以对抛物线求导,得到 K = 2 * x0 带入到切线的方程可以得 Y = 2 * x0 * X + b 因为切线经过点(x0,x0^2 - a),带入切线方程,就有 x0^2 - a = 2 * x0^2 + b 转而得到b = -x0^2 - a 然后带入到之前的切线的方程 Y = 2 * x0 * X + b 可得 Y = 2 * x0 * X - x0^2 - a,把。 把(x1, 0)..

更多