2016 - 2024

感恩一路有你

c携程 为什么Go语言如此不受待见?

浏览量:2603 时间:2021-03-14 15:25:26 作者:admin

为什么Go语言如此不受待见?

因为go语言比较简单,但是它的功能也非常强大,所以近年来非常流行,这也就成了原罪,就像PHP在非常流行的时候被喷得最厉害一样。

不可否认,rust在内存安全方面非常出色。它是一种系统级语言。甚至微软也公开支持锈菌,AWS对锈菌也有特别的偏好。然而,缺点是编译速度慢,学习曲线非常陡峭,使用其他语言的程序员需要一两个月的时间才能开始。生火很难。

但相比之下,go语言编译速度非常快,语法简单实用。基本程序员只需两天就可以熟练地完成手写项目。与铁锈的生态相比,围棋的生态要好得多。而且,经过这么多年的考验,go的合作非常成熟和稳定。Rust的合作刚刚确定,并不完美。

此外,国内很多厂商都在拥抱围棋语言,比如B站、字节跳动。面对go语言强大的高并发性能和低资源需求,那些仍然坚持使用PHP和Java的公司要么顽固守旧,不愿学习新东西,没有精力学习新东西,要么就要倒闭,走下坡路,没有希望。

但是,每种语言都有其优缺点。虽然围棋有这么多的优点和很好的性能,但为什么要和铁锈相比呢?事实上,围棋开发商很伤心。不管go怎么炸,都比不上生锈。总而言之,我是一个系统级的编程语言,我和C和C处于同一水平。结论:放松你的思想,做你喜欢做的事。Go和trust都是优秀的语言,所以你应该学好它们。

go是多线程还是协程?

3.1 concept

在Go程序中,它由轻量级线程实现,由Go运行时管理。

3.2与进程和线程的区别

1)进程有自己的独立堆栈,既不共享堆栈,也不共享堆栈。由操作系统安排。

2)线程有自己的独立堆栈和共享堆。共享堆和非共享堆由操作系统调度。

2)协同程序共享堆,但不共享堆栈。

3.3主线程与协程的关系

3.4协程轻于线程的原因

3.4.1线程的并发进程

线程是内核提供的服务。应用程序通过系统调用使内核启动线程,内核负责线程调度和切换。当线程正在等待I/O操作时,当线程变为不可命名状态时,将触发上下文切换。现代操作系统一般采用抢占式调度。上下文切换通常发生在时钟中断和系统调用返回之前。调度器计算当前线程的时间片。如果需要切换,则从队列中选择一个目标线程,保存当前线程的环境,并恢复目标线程的运行环境。最典型的方法是将ESP切换为指向目标线程内核堆堆栈,将EIP指向上次调度时目标线程的指令地址。

3.4.2协程并发进程

不依赖于操作系统及其提供的线程。golang自己实现的CSP并发模型:m,P,g

go corroutine也称为用户模式线程,在用户模式下进行corroutine之间的切换。在用户模式下,没有时钟中断、系统调用等机制,效率高。

3.5 go协程占用内存较少的原因

执行go协程只需要很少的堆栈内存(约4-5kb)。默认情况下,线程堆栈大小为1MB。

goroutine是在堆上分配的一段代码、一个函数项和一个堆栈。因此,我们可以轻松地创建数以万计的goroutine,但它们不是由操作系统调度的。

java能实现go语言的协程吗?

答案是肯定的,但这需要很长时间才能实现。协同程序的设计得到了许多语言的支持,例如go中的gotout和Python中的async。但是,您会发现,除了go之外,其他语言的协同程序中还有许多漏洞。协同过程中的重要一点是不能被阻断,这将直接影响到语言的协调性。然而,随着一门语言十几年的发展,其历史负担可想而知,也无法代代相传。因此,新语言在这方面相对更好。

Go语言现在的前景怎么样?

我学过Java和golang。Java已经使用了5年,我对Java的生态、工业语言和无数解决方案有着深刻的感受。无论您是从事互联网还是传统行业的开发,java开发总能解决很多问题。国内巨头阿里巴巴将java推向了极致。作为一种新的语音语言,golang的简单语法极低很难上手,他的生态也在逐步改善,比如docker etcd kubernetes Tidb、beego甚至阿里巴巴都在中国推出了Dubbo go。今天头条、比力、滴滴等中国公司的技术堆栈已经逐渐从Java变成了golang。不是Java不好,而是golang非常简单。如果您开发一个包含20行代码的web应用程序,Java可能需要您了解完整的技术栈,比如spring引导栈,而golang只需要您了解httprouter。RPC框架的支持并不比Java好多少。去cicd领域完全是玩Java。毕竟,docker和kubernetes是由golang编写的,它们自然得到无缝支持。Golang的并发模型也领先于Java。Gorouting是为并发而生的,所以现在学习golang是一个很好的选择,但是golang也有它自己的优点它的缺点是项目管理和包依赖管理不如Java,通用支持也不是很好。与Java的生态相比,go的国内生态还很欠缺。另外,爪哇的就业比哥朗简单,因为差距很大,但哥朗的就业工资并不低于爪哇。因此,从语言的角度来看,golang优于Java,生态上低于Java,理论上有光明的前景,优于Java,这要看国内的发展趋势,所以建议大家学习

你好,我是Advantech的技术总监。我们刚刚经历了从Java到golang的演变过程。我想和大家分享一下我们的经验,希望能对大家有所帮助。

为什么我们要将Java转换为golang?

这与我们商业模式的转变有很大关系。前面的模型是用户购买自己的VM,我们的Java应用程序部署在上面。后来,我们开始构建自己的云平台。基于成本考虑,我们非常关注在云平台上运行的应用程序的CPU和内存开销。仔细想想,如果一个Java应用程序使用2G内存和1核CPU,如果有10个用户在我们的云平台上部署应用程序,需要20g内存和10核CPU;但是如果应用程序是用golang编写的,可能只需要512M内存和0.5核CPU,所以总体资源成本只有5core5g,大大节省了资源成本。(从公司的角度看,省的钱就是赚的钱)

因此,我们只关注高朗的性能优势,节省内存和CPU。我们并不否认Java的卓越之处。我们仍然在一些组件上使用Java。

事实上,十大编程语言中没有golang,Java仍然是排名第一的编程语言:

go在流行程度和使用量上都无法与Java相比:

因此,我的理解是,任何一种语言的选择都应该结合公司的经营战略和经营目标来考虑,而不是听从别人的建议,选择哪种语言比较流行。

希望对您有所帮助。

现在是不是越来越多的大公司在使用golang语言?为什么?

区块链爆发,我们为什么要学习围棋语言?

2018区块链人才需求是2017年同期的9.7倍。据招聘网站统计,区块链中绝大多数岗位都要求掌握围棋语言。

153行代码爬行100段0.8秒,语言代码简洁接近python,运行速度堪比C语言开发。

与其他编程语言相比,go内置goroutine调度机制,区块链采用go语言开发,并发性强。

2018年,区块链技术人才似乎成为新的专业人才,竞争激烈,薪酬也可以很高。区块链技术的逐步完善和发展,必将使这一领域的人才更加炙手可热。

c携程 golang取消另一个协程 携程

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。