golang并发编程

几个概念 并行和并发 并行 多线程程序在多个核的cpu上运行,就是并行 并发 多线程程序在一个核的cpu上运行,就是并发 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。比如你运行一个 Go 程序 go run main.go,操作系统就会创建一个进程。每个进程有自己独立的内存空间、文件描述符、环境变量等,不同进程之间的资源默认是隔离的。 B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。多个线程共享所属进程的所有资源(内存、文件句柄等) C.一个进程可以创建和撤销多个线程;同一个进程中的多个线程之间可以并发执行。 协程和线程 协程:独立的栈空间,共享堆空间,调度由用户自己控制,本质上有点类似于用户级线程,这些用户级线程的调度也是自己实现的。 线程:一个线程上可以跑多个协程,协程是轻量级的线程。 Goroutine 启动单个goroutine goroutine的概念类似于线程,但 goroutine是由Go的运行时(runtime)调度和管理的。Go程序会智能地将 goroutine 中的任务合理地分配给每个CPU。Go语言之所以被称为现代化的编程语言,就是因为它在语言层面已经内置了调度和上下文切换的机制。 启动goroutine的方式非常简单,只需要在调用的函数(普通函数和匿名函数)前面加上一个go关键字。 1func hello() { 2 fmt.Println("Hello Goroutine!") 3} 4func main() { 5 go hello() 6 fmt.Println("main goroutine done!") 7 time.sleep(time.Second) 8} 执行上面的代码你会发现,这一次先打印main goroutine done!,然后紧接着打印Hello Goroutine!。 启动多个goroutine 1var wg sync.WaitGroup 2 3func hello(i int) { 4 defer wg.Done() // goroutine结束就登记-1 5 fmt.Println("Hello Goroutine!", i) 6} 7func main() { 8 9 for i := 0; i < 10; i++ { 10 wg.Add(1) // 启动一个goroutine就登记+1 11 go hello(i) 12 } 13 wg.Wait() // 等待所有登记的goroutine都结束 14} 若主协程退出,其他任务被迫终止。没有主协程,新协程也不进行。 ...

April 24, 2026 · 5 min · 1006 words · Jamaisvu

💻电脑时间管理大师:Manic Time 最易懂的速成教程

引言 博主有段时间特别痴迷记录生活习惯,我曾在 4 月份陷入 手动复盘的困境—— 想记录电脑使用习惯却难以坚持:手动记太麻烦、整理数据费时间,一想到复盘流程就头大。直到遇到 Manic Time,这款电脑时间管理软件彻底解决了我的痛点:它能静默在后台运行,从开机到关机全自动记录电脑操作(温馨提示:隐私相关记录还是别记录了哈🤣)。 虽初用时觉得功能繁琐、对新手不友好,但熟悉后才发现它的核心优势 ——无痛自动记录:只需花 10 分钟学基础操作,后续无需手动干预,想看时间习惯时随时调用数据。本文专为和我一样的 “记录新手” 打造,用最直白的步骤,教你掌握 Manic Time 的自动记录核心功能。 正文 1. 核心前置:3 分钟摸清 Manic Time 关键模块 Manic Time 的自动记录逻辑围绕 “时间轴 + 统计” 展开,新手无需学所有功能,先掌握 2 个核心模块即可。 1.1 时间轴:自动记录的 “数据底座” 时间轴是 Manic Time 记录数据的核心载体,3 条关键时间轴分清就好了: 标签时间轴:按自定义标签记录,但无法自动标记,需手动操作(后续会教如何 “变自动”)。 程序时间轴:按使用的程序(如 edge.exe、微信.exe)自动记录,无需手动干预,是 “全自动数据来源”。 自动标记时间轴:支持按规则自动标记标签,可理解为 “能自动工作的标签轴”(核心功能,后续重点用)。 图 1:Manic Time 时间轴面板(3 条核心时间轴,新手重点关注) 1.2 统计信息:让时间分配 “可视化” 统计信息是 “看结果” 的关键,能将时间轴数据转化为直观图表: 点击顶部导航栏「统计信息」,面板会自动汇总所有时间轴数据。 调整「分组依据」:可按 “天” 或 “周” 汇总,方便查看短期 / 长期时间分配。 切换图表类型:建议用 “折线图”,能清晰看到某类活动(如娱乐、工作)的时间变化趋势。 我们做所有自动设置的最终目的,就是让「统计信息」能直接展示 “自定义标签” 的时间数据,比如 “娱乐视频耗时”“工作软件使用时长”,方便快速复盘。 ...

September 6, 2025 · 2 min · 233 words · Jamaisvu

Obsidian 多端同步:用七牛云 + Remotely Save 实现手机与电脑无缝协作

引言:灵感随时记,多端不脱节 Obsidian 的白板功能对梳理编程数据流、搭建知识体系十分友好,但很多时候灵感来袭时我们并不在电脑前,只能用手机临时记录,后续还要手动迁移到电脑端的 Obsidian 中,既繁琐又容易遗漏细节。 如果 Obsidian 能实现多端同步,就能让创作更顺畅:手机随手记下的想法,下次打开电脑时,只需点击同步按钮,就能继续编辑;再结合之前分享的PicGo 图床搭建教程,还能在手机与电脑间快速传输文字和图片。 准备环境:所需工具清单 要实现 Obsidian 多端同步,需准备以下工具: 云存储服务:七牛云对象存储(作为 Obsidian 的远程存储载体); 笔记应用:Obsidian(需同时安装 PC 端和手机端,建议使用最新版本); 同步插件:Remotely Save(Obsidian 第三方插件,负责多端数据同步)。 第一步:七牛云对象存储配置 七牛云的「对象存储(Kodo)」是同步的核心 “仓库”,请按以下步骤配置: 1. 注册并完成实名认证 访问七牛云官网,完成账号注册后,务必进行实名认证(个人或企业认证均可,按页面提示提交资料即可)。 ⚠️ 实名认证是使用对象存储的必要前提,必须完成! 2. 创建存储空间 实名认证通过后,进入七牛云控制台,操作如下: 点击左侧导航栏「对象存储 Kodo」; 点击「创建空间」,填写相关信息: 空间名称:自定义(需保证全局唯一,例如obsidian-sync-2025); 存储区域:选择距离自己最近的区域(后续同步速度更快,区域与 ID 的对应关系见下文表格); 其他选项(如存储类型、访问控制等):新手保持默认设置即可。 3. 获取访问密钥(AK、SK) 同步 Obsidian 需要 “访问密钥” 来验证身份,步骤如下: 点击控制台右上角头像,选择「密钥管理」; 点击「创建密钥」(若已有密钥,可直接使用); 保存生成的**AccessKey(AK)**和**SecretKey(SK)**—— 这是后续配置的关键凭证,务必妥善保存! 第二步:Obsidian 与 Remotely Save 同步配置 完成七牛云配置后,需在 Obsidian 中安装并配置「Remotely Save」插件,实现与云存储的连接。 1. 安装 Remotely Save 插件 打开 Obsidian PC 端,依次操作: 设置 → 第三方插件 → 开启「社区插件市场」→ 搜索「Remotely Save」→ 点击「安装」并「启用」。 ...

September 6, 2025 · 1 min · 199 words · Jamaisvu