golang的context和chan 的使用
1. context 作用
context包的context的接口,主要是控制协程执行上下文的时间,以及取消程序的执行,以及上下文中传递数据等作用,golang中耗时或者需要协同的操作都会见到context的身影。
context有几个常用的方法
1.1 context.Backgroud()
创建一个空白的,顶级的,不会被取消的上下文。
1.2 context.WithTimeout
创建一个有执行时间限制的上下文
func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {
return WithDeadline(parent, time.Now().Add(timeout))
}
可以通过ctx.Done()方法获取上下超时的通知。
package mainimport ("context""fmt""time"
)func main() {parentCxt := context.Background()ctx, cancel := context.WithTimeout(parentCxt, time.Second*5)go longTimeTask(ctx)time.Sleep(time.Second * 10)cancel()fmt.Println("task cancel success")
}func longTimeTask(ctx context.Context) {for {//fmt.Println("ok")select {case <-time.After(time.Second * 1):fmt.Println("task compete")case <-ctx.Done():fmt.Println("time out")return}}
}
1.3 context.WitchCancel(parentContext)
获取一个可以中止的上下文,该方法会返回一个新的context,和cancel函数,调用cancel函数后,通过ctx.Done()方法可以获取到上下文取消的通知
package mainimport ("context""fmt""time"
)func main() {parentCxt := context.Background()ctx, cancel := context.WithCancel(parentCxt)go longTimeTask(ctx)time.Sleep(time.Second * 10)cancel()fmt.Println("task cancel success")
}func longTimeTask(ctx context.Context) {for {//fmt.Println("ok")select {case <-time.After(time.Second * 1):fmt.Println("task compete")case <-ctx.Done():fmt.Println("time out")return}}
}
1.4 context.WithValue()
func WithValue(parent Context, key, val any) Context {
if parent == nil {
panic(“cannot create context from nil parent”)
}
if key == nil {
panic(“nil key”)
}
if !reflectlite.TypeOf(key).Comparable() {
panic(“key is not comparable”)
}
return &valueCtx{parent, key, val}
}
可以在上下文中存贮一些参数,通过上下文随时获取。
2.chan 信道
golang的chan和map,切片,接口,函数一样是引用类型。
golang更加推荐使用chan去解决并发的协作的问题,对chan的读写是并发安全的,当然你也可也以使用sync.Mutex等包来控制并发。
相关文章:
golang的context和chan 的使用
1. context 作用 context包的context的接口,主要是控制协程执行上下文的时间,以及取消程序的执行,以及上下文中传递数据等作用,golang中耗时或者需要协同的操作都会见到context的身影。 context有几个常用的方法 1.1 context.B…...
洛谷P3574 [POI2014] FAR-FarmCraft(树形dp)
洛谷 P 3574 [ P O I 2014 ] F A R − F a r m C r a f t (树形 d p ) \Huge{洛谷P3574 [POI2014] FAR-FarmCraft(树形dp)} 洛谷P3574[POI2014]FAR−FarmCraft(树形dp) 文章目录 题意题目说明 思路标程 题目…...
vue/core源码中ref源码的js化
起源: 当看见reactivity文件中的ref.ts文件长达五百多的ts代码后,突发奇想想看下转化成js有多少行。 进行转化: let shouldTrack true; // Define shouldTrack variable let activeEffect null; // Define activeEffect variable// 定义…...
准备打ccf
准备打ccf...
k8s遇到的错误记录
时隔四年有开始重新鼓捣k8s了,重新安装后遇到的错误记录如下: Error: Package: kubelet-1.14.0-0.x86_64 (kubernetes) Requires: kubernetes-cni 0.7.5 Available: kubernetes-cni-0.3.0.1-0.07a8a2.x86_64 (kubernetes) …...
全局平均池化笔记
全局平均池化(Global Average Pooling, GAP)是一种用于卷积神经网络(CNN)中的池化操作,其主要作用和优点包括: 减少参数数量:全局平均池化层将每个特征图通过取其所有元素的平均值,压…...
【数仓系列】maxcompute、postgresql、sparksql等行转列数据处理实战总结(其他类型持续总结更新)
1.熟悉、梳理、总结项目研发实战中的SQL开发日常使用中的问题、经验总结,都是常用的开发技能,可以省去很多时间,时间长就忘记了 2.欢迎点赞、关注、批评、指正,互三走起来,小手动起来! 文章目录 1.maxcompu…...
用数据,简单点!奇点云2024 StartDT Day数智科技大会,直播见
在充满挑战的2024,企业如何以最小化的资源投入和试错成本,挖掘新的增长机会,实现确定性发展? “简单点”是当前商业环境的应对策略,也是奇点云2024 StartDT Day的核心理念。 5月28日,由奇点云主办的2024 S…...
Cloneable接口和深拷贝
在java中如何对对象进行拷贝呢?我们可以使用Object类中的clone方法。 一、浅拷贝 在使用clone方法对对象进行拷贝的时候,需要注意: 1.需要重写clone方法; 2.clone方法的返回值是Object类,需要强制类型转化…...
C++:vector的介绍及使用
✨✨✨学习的道路很枯燥,希望我们能并肩走下来! 文章目录 文章目录 前言 一、vector的介绍 二、vector的使用 2.1.构造和赋值重载(Member functions) 2.2 vector iterator 的使用 2.3 vector 空间增长问题 2.4 vector 增删查改 三 sort 四 v…...
【机器学习】大模型在机器学习中的应用:从深度学习到生成式人工智能的演进
🔒文章目录: 💥1.引言 ☔2.大模型概述 🚲3.大模型在深度学习中的应用 🛴4.大模型在生成式人工智能中的应用 👊5.大模型的挑战与未来展望 💥1.引言 随着数据量的爆炸性增长和计算能力的提…...
营销短信XML接口对接发送示例
在现代社会中,通信技术日新月异,其中,短信作为一种快速、简便的通信方式,仍然在日常生活中占据着重要的地位。为了满足各种应用场景的需求,短信接口应运而生,成为了实现高能有效通信的关键。 短信接口是一种…...
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:C语言刷题系列 目录 一、问题描述 二、解题思路 解题思路: 解题步骤: 三、C语言代码实现及测试 一、问题描述 给定一…...
Python pdf2imges -- pdf文件转图片
pdf文件转图片,需要安装PyMuPDF包,具体PyMuPDF包介绍可以参考:Python 处理 PDF 的神器 -- PyMuPDF import fitz # pip install PyMuPDF# PDF转换为IMG统一管理 def pdf_to_images(pdf_path, img_path, filename):"""pdf_p…...
分布式版本控制工具 git
git 是什么 分布式版本控制工具。github 是代码托管平台。 git 有什么用 保存文件的所有修改记录。使用版本号(sha1 哈希值) 进行区分。随时可浏览历史版本记录。可还原到历史指定版本。对比不同版本的文件差异。 为什么要使用 git 多人协作开发一个大…...
Flutter 中的 ExpansionTile 小部件:全面指南
Flutter 中的 ExpansionTile 小部件:全面指南 在 Flutter 应用中,ExpansionTile 是一个常用的折叠列表项,它允许用户点击标题来展开或折叠更多的内容。这个组件在实现可折叠列表、FAQ 部分或显示详情信息时非常有用。本文将详细介绍 Expansi…...
二进制的协议的测试程序
一、引子 由于要调试二进制私有协议,不想用C重头到尾写,用C写工程量有点大,因此想找一个比较简单的工具,postman无法实现,外界的几乎找不到合适的工具,只能考虑手写一个。 前面写了一个python通过tcp协议发…...
多线程事务
一、业务场景 我们在工作中经常会到往数据库里插入大量数据的工作,但是既需要保证数据的一致性,又要保证程序执行的效率。因此需要在多线程中使用事务,这样既可以保证数据的一致性,又能保证程序的执行效率。但是spring自带的Trans…...
春秋云境CVE-2020-26048
简介 CuppaCMS是一套内容管理系统(CMS)。 CuppaCMS 2019-11-12之前版本存在安全漏洞,攻击者可利用该漏洞在图像扩展内上传恶意文件,通过使用文件管理器提供的重命名函数的自定义请求,可以将图像扩展修改为PHP…...
MySQL 带游标的存储过程(实验报告)
一、实验名称: 带游标的存储过程 二、实验日期: 2024 年 5月 25 日 三、实验目的: 掌握MySQL带游标的存储过程的创建及调用; 四、实验用的仪器和材料: 硬件:PC电脑一台; 配置࿱…...
基于yolov8和faster-rcnn的电动车戴头盔检测,界面可选择模型,支持图像、视频和摄像实时检测【pytorch框架、python源码】
更多目标检测、图像分类识别、目标追踪、图像分割、图像检索等项目可看我主页其他文章 功能演示(看shi pin 下面的简介): https://www.bilibili.com/video/BV1DWXrBaE3Z/?spm_id_from333.1387.homepage.video_card.click&vd_source23c…...
环境变量-代理/PowerShell乱码
设置代理[Environment]::SetEnvironmentVariable(HTTP_PROXY, socks5://127.0.0.1:5800, User) [Environment]::SetEnvironmentVariable(HTTPS_PROXY, socks5://127.0.0.1:5800, User) [Environment]::SetEnvironmentVariable(ALL_PROXY, socks5://127.0.0.1:5800, User) Write…...
【Loom生产环境禁用清单】:这7个Spring Boot自动配置项正在 silently 杀死你的虚拟线程吞吐量
第一章:Java 25虚拟线程在高并发架构下的性能本质洞察Java 25正式将虚拟线程(Virtual Threads)从预览特性转为标准特性,标志着JVM并发模型的一次范式跃迁。其性能本质不在于单线程执行速度的提升,而在于**线程生命周期…...
解放你的无人机!DankDroneDownloader:轻松掌控DJI固件的终极指南
解放你的无人机!DankDroneDownloader:轻松掌控DJI固件的终极指南 【免费下载链接】DankDroneDownloader A Custom Firmware Download Tool for DJI Drones Written in C# 项目地址: https://gitcode.com/gh_mirrors/da/DankDroneDownloader 你知道…...
避坑指南:当Autoware遇上RS-LiDAR,点云格式转换与地面滤波的那些‘坑’(附源码修改)
Autoware与RS-LiDAR实战:点云格式转换与地面滤波的深度解决方案 当国产激光雷达遇上Autoware这套自动驾驶开发框架,技术团队往往会遇到一些意想不到的兼容性问题。特别是从Velodyne切换到RS-LiDAR这类国产雷达时,点云处理链路的异常往往会导…...
揭秘书匠策AI:课程论文写作的“智慧魔法棒”
在学术的奇妙旅程中,课程论文宛如一座座等待攀登的小山峰,既充满挑战,又蕴含着成长的机遇。对于众多初涉学术领域的学生而言,从构思选题到搭建框架,再到填充内容与精心打磨,每一步都可能伴随着困惑与迷茫。…...
Product Hunt 每日热榜 | 2026-04-09
1. Velo 标语:将任何内容分享为视频消息。 介绍:Velo 利用人工智能将你的原始屏幕录制转化为值得一看的、随时可以分享的视频。 产品网站: 立即访问 Product Hunt: View on Product Hunt 关键词:Velo, 视频消息, A…...
收藏!Java后端裁员潮下,程序员(小白必看)靠大模型破局翻身
凌晨一点半,手机屏幕突然亮起,是做Java后端开发的发小发来的消息,字里行间全是慌乱与不甘:“刚收到公司裁员通知,名单已经定死了,我真的懵了——部门里干了五年的资深老程都没保住,我这三年经验…...
从零入门性能测试:理论+JMETER实操,看完就能上手怯
一、环境准备 Free Spire.Doc for Python 是免费 Python 文档处理库,无需依赖 Microsoft Word,支持 Word 文档的创建、编辑、转换等操作,其中内置的 Markdown 解析能力,能高效实现 Markdown 到 Doc/Docx 格式的转换,且…...
虚拟线程性能拐点在哪?JVM 25.0.1+GraalVM+Linux eBPF监控实录,8大生产环境反模式曝光,现在不看下周就踩坑!
第一章:虚拟线程性能拐点的理论边界与工程定义虚拟线程(Virtual Thread)作为 JDK 21 引入的轻量级并发抽象,其性能优势并非在所有负载场景下线性增长。当调度密度、I/O 阻塞率与平台线程(Platform Thread)资…...
