首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
10-29 21:48
魔门塔(苏州)科技有限公司_感知算法工程师(准入职员工)
momenta内推momenta内推
momenta自动驾驶C++日常实习一面面经流程时间线:3.25HR联系约一面3.25晚7点一面3.26早上通知一面通过约二面3.26下午5点二面3.27早上HR沟通入职时间,已OC。一面流程:无手撕50min1.自我介绍2.面试官介绍部门职责(不涉及算法开发,是否能接受)3.简历浅挖(面试官大概率不是规控方向的,对项目可能了解不多,后续了解到是电气背景的)(1)hybird启发项如何设计(2)介绍latticeplanner流程(3)项目中涉及哪些传感器,如何获取heading angle。4.一系列C++,Linux,ROS八股(只列出部分还记得的)1.听说过rvo嘛2.知道raii嘛,原...
点赞
评论
收藏
分享
10-29 15:59
伟创力_软件_嵌入式软件工程师
【回眸】技术干货——RS485、RS232,I2C,SPI特点、PMIC、RTOS相关问题
RS485的特点1、需要电平转换后再与TTL电路连接2、速率最高为20Kbps3、噪音抗干扰能力弱4、传输距离最大50m左右RS232特点1、电平无须转换即可与TTL电路直连2、速率最高10Mbps3、噪声抗干扰能力强4、传输距离最大3000米左右I2C串行通信协议,连接MCU和外设,有两条信号线,时钟线+信号线多设备在同一个总线上工作,但每个设备有独立的地址SPI串行通信协议,有4条线,包括时钟线(SCK),主输出从输入线(MOSI),片选线(SS)SCK:定时信号MOSI:传输数据SS:选中与主设备通信的从设备特点:传输速率快,只能一主多从PMIC什么是PMIC?PMIC是功率管理集成电路...
应届生必学实用物联网技术
点赞
评论
收藏
分享
09-29 17:00
已编辑
东莞理工学院 Java
没招了
还没开始就结束了,这一个通知图来自群友,是真的,我也感觉太离谱了,还好我们公司方八天,祝友友们国庆快乐
你的国庆怎么过
点赞
评论
收藏
分享
10-24 19:59
门头沟学院 Java
27届求拷打
身边的佬们都有几段实习了,现在1000招呼/ 33的简历,小厂都进不去。各位佬我还有机会吗✋😭✋
白金之星世界:
我还在幻想年末找一份实习
点赞
评论
收藏
分享
10-29 14:37
门头沟学院 测试开发
招银云创二面
二面已挂二面只问了几道八股,我就退出面试了
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
java后端学习经验分享(大三进大厂版)
1.4W
2
...
26届0实习秋招总结
1.0W
京东秋招开奖
热聊中
3
...
企鹅后端日常实习一面
6308
4
...
摸爬滚打,我也一定要离开华为
4014
5
...
大家秋招压力很大一般怎么调节呀
3773
6
...
26届双非本拿下美团SSP的真实感受
3718
7
...
十一月,希望有个好的开始
3478
8
...
那个绩点倒数,挂科7门的女生最后考上了985研究生
3396
9
...
愿大家都能成为很厉害的人
2826
10
...
饿了么被淘宝闪购夺舍了,HC和团队会变吗
2512
创作者周榜
更多
正在热议
更多
#
你实习是赚钱了还是亏钱了?
#
6200次浏览
55人参与
#
找工作八股要背到什么程度?
#
4755次浏览
88人参与
#
京东开奖
#
433906次浏览
2460人参与
#
秋招开始捡漏了吗
#
35282次浏览
247人参与
#
我在牛爱网找对象
#
203046次浏览
1412人参与
#
用一句话形容你的团队氛围
#
3866次浏览
50人参与
#
入职以后才知道的校招谎言
#
102144次浏览
647人参与
#
你找工作是从容有余 or 匆忙滚爬?
#
3540次浏览
44人参与
#
上班后,才发现大学__白学了
#
6142次浏览
40人参与
#
同bg的你秋招战况如何?
#
161331次浏览
935人参与
#
今年秋招还有金九银十吗
#
26209次浏览
239人参与
#
今年秋招是回暖还是遇冷
#
3770次浏览
30人参与
#
五一之后,实习真的很难找吗?
#
90388次浏览
561人参与
#
规定下班时间vs实际下班时间
#
57239次浏览
332人参与
#
学历对求职的影响
#
552811次浏览
3924人参与
#
辞职后的日常
#
16888次浏览
84人参与
#
你喜欢工作还是上学
#
79529次浏览
865人参与
#
打工人的精神状态
#
103901次浏览
1321人参与
#
Offer比较,求稳定还是求发展
#
65575次浏览
272人参与
#
分享一个让你热爱工作的瞬间
#
44656次浏览
395人参与
#
一人一个landing小技巧
#
129117次浏览
1467人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务