首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
还没有回复哦~
相关推荐
今天 00:40
美团_后端开发(准入职员工)
忙完了工作,又要毕业论文……
工作基本定了,比较满意。这深度学习真是难搞啊,论文看不懂,代码看不懂,不会改,创新点??? 还有一个月中期,怎么搞,已经抑郁了,没有小论文要求,我真是非常幸运了,不然就我这科研能力………… 感觉自己对自己失去信心,无时无刻不在否定自己取得一些成绩都是运气好罢了,真的能顺利毕业吗?严重内耗、无力感爆棚啊…………
无为__:
同 没想到大佬也有相似的问题 真的还蛮焦虑能不能毕业的问题
你们的毕业论文什么进度了
牛客解忧铺
点赞
评论
收藏
分享
11-18 00:44
郑州大学 光伏逆变器工程师
小米的offer终于来了!
耶!我顺利通过了第一场面试,真是太开心了!虽然小米可能是我目前能接触到的顶尖选择,但我会继续尝试其他机会。与小米的员工交流后,发现他们既温柔又细心,或许我也有点运气加成吧!
Haenu0317:
转人工
牛客创作赏金赛
点赞
评论
收藏
分享
11-18 16:08
福州大学 Java
扣税比我总包都高一大截
大佬们太狠了
影流之主:
干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞
评论
收藏
分享
10-18 13:02
西安理工大学 C++
回归0offer
牛课上学的话术是真爽
牛舌:
如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞
评论
收藏
分享
11-19 23:55
哈尔滨理工大学 汽车项目管理
南昌的9k要不要签呢
我在秋招中终于拿到了唯一的offer,南昌的公司给我开了9k(基本工资6k加绩效3k)。可是,家在西北,距离实在有点远,这让我很纠结。要不要签呢?虽然薪水看起来不错,但离家这么远,心里总是有些不安。希望有过来人能给点建议!
牛客创作赏金赛
点赞
评论
收藏
分享
点赞成功,聊一聊 >
点赞
收藏
评论
分享
回复帖子
提到的真题
返回内容
全站热榜
1
...
给正在秋招中枯燥的大家找个乐子听听吧,不被理解真的心寒
1.3W
2
...
26日常实习小红书面经
1.2W
3
...
牛客创作赏金赛:首发动态,100%拿现金!
1.1W
4
...
sagima的阎良出差日记
1.1W
5
...
秋招是时候收官了
9249
6
...
双非本科四年的总结
9176
7
...
秋招颗粒无收,我要何去何从
7513
8
...
请大家警惕“总包”骗局!
7043
9
...
收到offer了!!!!
6990
10
...
我的秋招结束了,五年前的我会想到这一切吗
6788
正在热议
#
25届秋招总结
#
244621次浏览
1994人参与
#
学历or实习经历,哪个更重要
#
40781次浏览
295人参与
#
北方华创开奖
#
22635次浏览
257人参与
#
地方国企笔面经互助
#
2495次浏览
6人参与
#
你最想要的公司福利是?
#
39536次浏览
119人参与
#
选完offer后,你后悔学本专业吗
#
10045次浏览
75人参与
#
面试题刺客退退退
#
136808次浏览
2088人参与
#
国企/银行/研究所公司爆料
#
89584次浏览
411人参与
#
应届生被毁约被毁意向了怎么办
#
26860次浏览
237人参与
#
一觉醒来,我觉醒了超级打工人系统
#
2800次浏览
35人参与
#
机械应届生薪资要多少才合适?
#
12352次浏览
60人参与
#
查收我的offer竞争力报告
#
16437次浏览
223人参与
#
校招入职后的感受
#
156803次浏览
1959人参与
#
你觉得第一学历对求职有影响吗?
#
14841次浏览
121人参与
#
没有实习经历,还有机会进大厂吗
#
804742次浏览
13810人参与
#
我的工作日记
#
21077次浏览
270人参与
#
不给转正的实习,你还去吗
#
1516346次浏览
16963人参与
#
寒假躺平还是提前实习
#
58247次浏览
436人参与
#
总结:哪家公司面试体验感最差
#
25567次浏览
129人参与
#
秋招OC许愿
#
226223次浏览
1868人参与
#
如何写一份好简历
#
601415次浏览
8426人参与
牛客网
牛客企业服务