首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
以富之名
杭州电子科技大学 前端工程师
关注
已关注
取消关注
还是很不错滴~
@Anyaaaa:
【扫描全能王】【干货】Goroutine & Channel
并发模型 进程 vs 线程 vs Goroutine 进程,是操作系统分配资源的基本单元。不同的进程之间内存空间资源独占,只能通过信号、管道、文件等方式进行通信。PHP-FPM即采取多进程并发模型,每一个请求过来,都会fork一个独立的进程用于处理该请求。 线程,是操作系统调度的基本单元。同一进程下的不同线程之间共享内存,可能出现资源竞争等问题。Java Servlet即采用多线程并发模型,每一个请求过来,都会创建一个独立的线程用于处理该请求。由于多线程使用共同的内存空间,就需要考虑全局性资源(全局的变量、对象、文件等)的线程安全问题。 Goroutine,是一种协程,即用户空间的线程,操作系统不直接调度。相比进程和线程的优势,下文会具体阐述。 Goroutine & Channel Golang使用CSP模型实现并发,goroutine和channel即分别对应CSP模型中的Process和Channel。不同于多线程并发模型需要在竞态情形(race condition)下,通过复杂的锁机制确保资源正确使用。goroutine之间可以使用channel进行通信。Channel可以看成一个 FIFO 队列,对 FIFO 队列的读写都是原子的操作,不需要加锁。 Goroutine创建 在Golang中,Goroutine是语言级别的支持,只需要通过一个简单的go关键字即可创建Goroutine,十分快捷简单。 go func() { // 开启Goroutine fmt.Println("Hello World!") }() Channel创建 & 关闭 Channel对象必须使用make()函数进行创建。 channel := make(chan int) // 创建Channel channel := make(chan int) // 创建Channel channel := make(chan int) // 创建Channel buffered_channel := make(chan int, 2) // 创建带有缓冲的Channel close(channel) // 关闭Channel Channel发送 & 接收 当"<-"发送运算符在Channel对象右边时,代表发送操作。 当"<-"接收运算符在Channel对象左边时,代表接收操作。可以只接收,不赋值;也可以接收完,再通过"="赋值运算符赋值给一个变量。 package mainimport ( "fmt" "time")func main() { channel := make(chan int) // 创建Channel go func() { // 开启Goroutine time.Sleep(1000000000) channel <- 1 // 向Channel发送数据 }() result := <-channel // 接收Channel中的数据 fmt.Println(result)} select语句 select语句由多个带有Channel的发送或接收操作的case组成。 一组select语句执行,只会处理第一个就绪的发送或接收case。 package mainimport ( "fmt" "time")func main() { channel1 := make(chan int) // 创建Channel1 channel2 := make(chan int) // 创建Channel2 go func() { // 开启Goroutine1 time.Sleep(1000000000) channel1 <- 1 // 向Channel1发送数据 }() go func() { // 开启Goroutine2 time.Sleep(100000000) channel2 <- 2 // 向Channel2发送数据 }() select { // 同时等待接收Channel1和Channel2的数据,只要有一个就绪,即完成对应case的处理 case result := <-channel1: fmt.Println(result) case result := <-channel2: fmt.Println(result) }} for … range语句 for … range语句可以迭代接收Channel中的数据,直到Channel被关闭。 package mainimport ( "fmt" "time")func main() { channel := make(chan int) // 创建Channel go func() { for i := 0; i < 10; i++ { time.Sleep(1000000000) channel <- i // 不断向Channel发送数据 } close(channel) // 关闭Channel }() for result := range channel { // 迭代Channel中的数据,并打印出来 fmt.Println(result) }} 优雅地实现处理超时 golang标准库中的time.After()函数的返回值,即是一个channel。 通过和select语句相结合,我们优雅地实现处理超时。 package mainimport ( "fmt" "time")func main() { channel := make(chan int) // 创建Channel go func() { // 开启Goroutine time.Sleep(1000000000) channel <- 1 // 向Channel发送数据 }() select { case result := <-channel: // 接收Channel中的数据 fmt.Println(result) case <-time.After(100000000): fmt.Println("time out") }} 欢迎加入~! ps:目前诚招前端/后端/移动端/测试社招&校招岗位! 岗位介绍链接:https://m.zhipin.com/mpa/html/weijd/weijd-boss/1a2cf8dbc2a5c73103V53dW_F1Y~?sid=qr_self 公司介绍:http://www.ccint.com/(扫描全能王、名片全能王、启信宝、橘子兼职都是我们的产品哟~~) 简历投递:邮件发送至fei_hong@intsig.net(命名格式为“岗位+20xx届+学校+姓名”)期待你们的加入哦~ 欢迎在评论中跟我们进行技术交流哦~ 等你~
点赞 8
评论 7
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 18:49
已编辑
牛客运营
作为mt,希望你入职第一天是这样的……
虽然我早已不记得,自己入职第一天具体发生了什么(毕竟也不是新手村的人了),但作为mt,倒是可以和大家分享:入职第一天怎么做,能给你未来的导师和同事留下一个好印象📒别迟到!尽量早一点到(或至少准时)绝对是加分项。一个有时间观念的新人,会让同事觉得你态度认真、做事靠谱,第一印象分直接拉满 💯。进工作群后,主动打招呼但不用刻意“装E”,在工作群里简单自我介绍、和大家问声好,还是很有必要的。记住要“大大方方”的啊,让团队感受到你想融入的热情。衣着干净整洁,上班前一天洗澡是基本礼仪,懂的都懂(你不洗澡也至少洗个头!)。穿一件清爽整洁的衣服,传递出你重视这份工作、也尊重身边同事的信号。主动问mt今天要...
入职第一天
点赞
评论
收藏
分享
01-04 19:37
湘潭大学 项目经理
牧原,“创”出一条中国养猪新路
日前,“2025央视财经跨年之夜”的舞台上,牧原食品股份有限公司董事长秦英林现身,和一众来自新能源车、人工智能、家电等行业的同路人畅谈创新,分享“33年只做养猪一件事”的心得感悟。当在破局、信念、远见等一串闪耀的词语中做出选择时,秦英林挑中了最没有光环,甚至有些“沉重”的——抉择。从“20头猪死了19头”的惜败,到非洲猪瘟来袭时“不冲锋也是等死”的抉择,高科技和新经济的主场上,这样一段并不轻松的讲述,恰恰勾勒出一种极具“中国气质”的创新路径:不靠风口加持,而是在传统的行业、最难的时刻,硬解难题、死磕技术,最终成长为科技驱动的全球第一养殖企业。牧原走过的路,已不仅仅是一个养猪企业的成长史,更是一...
点赞
评论
收藏
分享
2025-12-07 21:08
北京科技大学 Java
27届Java日常实习简历求拷打
27届打算找大厂日常实习,之前有一段中小厂的实习,还有一个点评项目求大家帮忙看看简历有没有什么问题,最近一直投也约不到面
简历中的项目经历要怎么写
点赞
评论
收藏
分享
01-05 13:14
上海得物信息集团有限公司_电商推荐产品经理(准入职员工)
得物内推,得物内推码
服装运营岗位~真实工作体验1.💰待遇 薪资是一天150,包晚饭,有双休,基本不加班,有茶水间小零食无限吃🍪,健身房、员工折扣店,晚上10点后打车免费,过节活动礼包🎁 2.👗工作 服装运营岗,主要技能需要会用Excel、vlookup 工作内容有点像对接商家的客服👩🏻💻并且帮助你的直属上级完成部分工作(不同岗位要求不一样。有的是需要会ps之类的) ⌚上班时间: 早10:00晚7:00or早9:30晚6:30 中午12:00-1:30 有的部门是2点 3.🏠租房 异地实习选择的是在附近租房,我是直接在🍠上找的姐妹续租,也可以在租房app上找,入职后有得物内部租房群 4.面试 投...
上海得物信息集团有限公司公司福利 1260人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
双非非科班2年时间的转码历程
2.6W
2
...
入职第一天:允许自己像个新生
7299
3
...
简历挂麻了?因为你的简历只有“宽度”没有“深度”!
5762
4
...
26秋招小结 含面经碎碎念版
4211
5
...
百度java一面 28届的第一次大厂面试 感觉g了
3548
6
...
师门闯关记①:好学姐我听你的,就选你说的那个导师了
3457
7
...
双非老鼠的悲惨秋招
3231
8
...
实习不忙被公司要求下周再来
3069
9
...
拥抱人机共生,锻造不可替代的“金头脑”
2932
10
...
为什么华为给到16级我还是拒了?(开发)
2771
创作者周榜
更多
正在热议
更多
#
26年哪些行业会变好/更差
#
12566次浏览
166人参与
#
卷__卷不过你们,只能卷__了
#
5827次浏览
150人参与
#
去年的flag与今年的小目标
#
6081次浏览
148人参与
#
哪些公司在招寒假实习?
#
6406次浏览
77人参与
#
有深度的简历长什么样?
#
11749次浏览
242人参与
#
机械人的秋招小目标
#
25744次浏览
226人参与
#
写论文的崩溃时刻
#
2927次浏览
94人参与
#
现在前端的就业环境真的很差吗
#
487293次浏览
5855人参与
#
入职第一天
#
7214次浏览
148人参与
#
你不能接受的企业文化有哪些
#
6732次浏览
120人参与
#
腾讯音乐求职进展汇总
#
146902次浏览
1042人参与
#
央国企投递记录
#
170015次浏览
1633人参与
#
你都用AI做什么
#
4503次浏览
111人参与
#
实习教会我的事
#
48492次浏览
359人参与
#
一人分享一道面试手撕题
#
15590次浏览
660人参与
#
应届生应该先就业还是先择业
#
163169次浏览
828人参与
#
实习,不懂就问
#
148378次浏览
1336人参与
#
秋招白月光
#
644890次浏览
4981人参与
#
新凯来求职进展汇总
#
67047次浏览
174人参与
#
你的秋招进行到哪一步了
#
2478625次浏览
23235人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务