Golang的string数据争用导致的panic Oct 11, 2024

简单说下问题:多个goroutine并发读写string,读取string(fmt.Printlnjson.Marshal)的goroutine会panic。根因是string是一个胖指针,除了pointer字段之外还有一个len字段的元数据。在给string变量赋值(拷贝)时,会逐个设置pointer和len字段,这个过程不是原子的。在有并发修改时,pointer和len就不一致了,这时就回发生问题:当len不为0,pointer为nil(0x0)时,就会panic: runtime error: invalid memory address or nil pointer dereference

本文首先探究下为什么golang string有这个问题,然后对比下java的string为什么没这个问题,最后介绍数据争用(data race)问题以及Golang和Rust如何避免该问题。

...
一键关闭WeGame和LOL客户端,避免浪费时间 Oct 1, 2024

如何快速关闭WeGame和LOL客户端?恶心的wegame总是在关闭游戏的时候浪费我时间,所以写了一个批处理文件,一键关闭wegame和LOL客户端。

...
Huawei手机防杀后台 Sep 22, 2024

设置里搜索下面两个设置,然后参考下面UU加速器的教程进行设置即可

  1. 应用启动管理
  2. 电池优化
...
macOS一些配置 Sep 22, 2024
Windows11 WSL2使用 Sep 22, 2024

wsl全称是windows的linux子系统,可以理解为在你的windows电脑上提供一个linux的工作环境。

...
OBS直播、录屏 Sep 7, 2024
Rust在poll方法中使用锁 Aug 9, 2024

看到一个在poll方法中使用锁的问题,觉得很有意思,记录一下。

...
Homebrew安装指定版本的软件 Jul 26, 2024

需要在mac上安装 clang-format-16,记录下homebrew安装指定版本软件的方法。

...
Rust reqwest代码阅读 Jul 20, 2024

最近在自己的rust_http_proxy中实现了简单的反向代理,第一版用的是手搓的无连接池版本,大致流程如下:

  1. 首先 TcpStream::connect 建立连接
  2. 通过 conn::http1::Builder 拿到 sender
  3. 发送请求 sender.send_request(new_req)

工作的很正常,但是没有连接池。想到 hyper 官方提供的 reqwest 是有内置连接池的,于是研究了下做了改造,记录下过程中读到的代码。

...
Afterburner配置文件备份 Jun 28, 2024

下载MSIAfterburner.cfg%programfiles(x86)%\MSI Afterburner\Profiles。当前版本是4.6.6(beta3),下载地址:msi官方guru3d下载。核心效果是展示各个cpu核心的使用率,如下:

alt text

下图是展示aida64提供的电压的配置:

...