首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
02-02 16:07
北京工业大学 Java
java业务项目选择求助
请问各位佬,星球上xfg的“拼团项目”适合跟着学么?需要先学一遍“小型支付商城”么?学习时长大概要多久呢?因为我看xfg项目大多是DDD架构的,感觉和MVC有些出入,不知道是跟着xfg写一个,还是再找一个MVC的学习了。求求大佬赐教赐教孩子吧
点赞
评论
收藏
分享
02-03 15:48
西安电子科技大学 Java
小米题真够难的,我面挂了…
上周五,晚上六点,参加了小米一面,整体时长1.5个小时,算是比较长的吧面试官看起来比较年轻,刚开始自己的心态也挺轻松,随着面试的进展,心情变的越加的不对劲,怎么问的每一道题都只知道一点,这是知道了自己的打法,专门来拆台来了 (让我自己认识到自己真不专业,基础太差)问题的答案,我都用一个链接的形式来呈现,相对简单的会做出解释px em rem vw vh 分别解释一下这几个单位www.jianshu.com/p/82f02af17…padding-top, 10%, 10rem,10vh, 10em 取值逻辑是什么这个里面有个坑 就是10% ,取的是父容器的宽度的10%em 也有个坑,不一定取的...
查看23道真题和解析
点赞
评论
收藏
分享
02-05 17:10
河北科技大学 Java
小厂面试官神人多
面了这么久发现面大厂虽然难,但整个面试流程是固定的,面完是会让你面试有所收获,能发现自己的缺陷不足的。面小厂纯属开盲盒,总能收获些神人上午面的一家小厂,面试官实习八股都不问上来直接让我写个功能,面到一半来句“wc,tmd这么d”(素质挺低的,不过不是骂我)下午二面的是家80人初创小厂叫句子互动,面试官是个中年光头男,要我百度一个在线编译器,10分钟写一道编程题(太久没写超时了),前面就感觉态度很怪,整个人很烦躁,我习惯性的打开了IDEA,来句“你没听清我说话吗?用在线编译”😅后面发我了一串代码让我讲解代码功能,代码太长飞书的弹幕列表又小,我拿触摸板复制不全。面试官就阴阳我“你觉得你是个细心的人吗?你代码都没复制全”,我道歉完之后,划拉了好一会那代码也粘不下来,我又道歉说我看着代码讲,那面试官还发火“把代码复制出来好吗?😡”要不是线上估计得跳过来打我本来前面态度差就够烦了,丢下一句话“爱过不过,真是费劲”就把会议关了,留下一脸懵逼的👨🦲
脑袋锈住了:
小厂神人多,大厂神人神
面试题刺客退退退
点赞
评论
收藏
分享
02-03 22:19
西北工业大学 前端工程师
好迷茫啊
实习一直打杂自己确实也没啥技术热情,项目自己聊起来简单单薄面试官问我做过什么难点,失语半天说没有马上要找暑期了,没有一点能拿得出手也许我就不适合这行吧
点赞
评论
收藏
分享
02-03 20:01
浙江大学 算法工程师
大华C++ 一面总结
1. 请做一个简单的自我介绍答案要点:基本信息:姓名、学校/工作背景、专业方向技术栈:熟悉C++、Linux系统编程、计算机视觉等项目经历:简要提及1-2个代表性项目求职意向:对该岗位的兴趣和职业规划2. 智能指针的实现原理是什么?shared_ptr和unique_ptr有什么区别?答案要点:引用计数机制:shared_ptr内部维护一个引用计数器,每次拷贝+1,析构-1,计数为0时释放资源unique_ptr独占所有权:禁止拷贝构造和赋值,只能通过std::move转移所有权,开销更小weak_ptr解决循环引用:不增加引用计数,用于打破shared_ptr的循环依赖自定义删除器:两者都支...
查看13道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
为什么说Java+langchain4j/spring AI依旧是传统后端
3381
2
...
字节飞书测开日常oc,附上面经
2619
3
...
有了AI之后,程序员能不能干到65岁?
2143
4
...
美团50亿收购叮咚买菜,校招HC会变多吗
2108
5
...
腾讯AI产品一面:如何缓解幻觉?
2057
6
...
测开前景
1728
7
...
腾讯提前批
1579
8
...
文科生能做产品经理吗?
1482
9
...
字节的offer流程需要多久
1415
10
...
26届Java简历求拷打
1348
创作者周榜
更多
正在热议
更多
#
在大厂上班是一种什么样的体验
#
12318次浏览
165人参与
#
你的mentor是什么样的人?
#
51143次浏览
721人参与
#
程序员找工作至少要刷多少题?
#
21173次浏览
272人参与
#
我和mentor的爱恨情仇
#
106272次浏览
948人参与
#
论秋招对个人心气的改变
#
13372次浏览
188人参与
#
机械人避雷的岗位/公司
#
44123次浏览
309人参与
#
为了减少AI幻觉,你注入过哪些设定?
#
6003次浏览
182人参与
#
秋招落幕,你是He or Be
#
54230次浏览
618人参与
#
校招第一份工作你干了多久?
#
136662次浏览
597人参与
#
高薪高压 vs 低薪wlb,你怎么选?
#
47405次浏览
290人参与
#
设计人如何选offer
#
189712次浏览
868人参与
#
考公VS就业,你怎么选?
#
91985次浏览
507人参与
#
职场上哪些行为很加分?
#
322550次浏览
3601人参与
#
你的秋招进行到哪一步了
#
2530878次浏览
23253人参与
#
牛客AI体验站
#
7727次浏览
210人参与
#
机械人还在等华为开奖吗?
#
312129次浏览
1582人参与
#
秋招投递记录
#
380923次浏览
3204人参与
#
12306一秒售罄,你抢到回家的票了吗?
#
2309次浏览
52人参与
#
我现在比当时_,你想录用我吗
#
9427次浏览
129人参与
#
重来一次,我还会选择这个专业吗
#
411271次浏览
3898人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务