Golang语言解决了哪些现实问题?

举报
liuzhen007 发表于 2021/08/27 21:56:45 2021/08/27
【摘要】 目录前言正文  问题一、开发速度和执行速度的权衡  问题二、合理利用服务器资源  问题三、避免共享内存的同步问题结尾 前言了解编程语言的小伙伴一定知道,我们在为某个项目选择开发语言时,总是需要在开发速度和程序性能之间做出选择。C 和 C++ 这类语言提供了很快的执行速度,而 Python 、Node.js 和 Ruby 这类语言则能提供快速的开发速度。Go 语言则博采众长,不仅提供了高性能的...

目录

  • 前言
  • 正文
      问题一、开发速度和执行速度的权衡
      问题二、合理利用服务器资源
      问题三、避免共享内存的同步问题
  • 结尾

前言

了解编程语言的小伙伴一定知道,我们在为某个项目选择开发语言时,总是需要在开发速度和程序性能之间做出选择。C 和 C++ 这类语言提供了很快的执行速度,而 Python 、Node.js 和 Ruby 这类语言则能提供快速的开发速度。Go 语言则博采众长,不仅提供了高性能的执行速度,同时还提供了可观的开发速度。当然,Golang 语言还有很多特性方面的优势。

正文

问题一、开发速度和执行速度的权衡

使用 Golang 语言进行项目开发速度快,不仅体现在编码简单、编码快速上,还体现在编译速度上。Golang 语言使用了更加智能的编译器,优化了库依赖算法,大大提高了工程代码的编译速度。具体方案是编译 Golang 工程时,编译器只寻址自己引用的基础库和第三方库,而不是像 Java、C、C++,需要遍历依赖链接中所有的依赖库,这样就大大提高了编译速度。

Java创建线程的代码示例:


public class MyThread extends Thread {
	public MyThread() {
		
	}
	public void run() {
		for(int i = 0; i < 10; i++) {
			System.out.println("线程打印:"+i);
		}
	}
	public static void main(String[] args) {
		MyThread mThread1=new MyThread();
		MyThread mThread2=new MyThread();
		mThread1.start();
		mThread2.start();
	}

Golang 语言创建协程代码示例:

go func() {
    for i := 0; i < 10; i++ {
        fmt.Println("线程打印:"+i)
    }
}()

通过上面的两个示例可以看出,使用 Golang 语言启动协程非常方便,代码编写也非常简单。

image.png

问题二、合理利用服务器资源

现在很多服务器都是多核的,一个优秀的应用程序和软件服务一定是可以合理利用服务器的硬件资源的。如果使用其他语言,我们需要编写大量的线程同步代码来利用这些核,但是使用 Golang 的话,我们就不用考虑这个问题了。Golang 语言的并发特性就能够先天满足,Golang 并发特性的载体就是协程——goroutine。协程是一种微线程,能够完成线程的工作,但是开销却非常小。

image.png

问题三、避免共享内存的同步问题

我们知道当不同的线程修改同一个数据,而这个数据是全局变量或者共享内存时,就必须使用复杂的锁规则来防止不同步的修改操作。Golang 语言通过引入通道的概念,巧妙的解决了这个问题。通道(channel)提供了一种新的工作模式,保证并发修改时的数据安全。通道在同一时刻只会有一个 goroutine 修改数据,从而保证了几个运行的 goroutine 之间收发数据的同步性和一致性。

image.png

结尾

综上所述,Golang 语言的编译器速度非常快,显著减少项目构建的时间。同时,Golang 语言内置并发机制,所以不用被迫使用特定的线程库,就能让软件自动扩展,使用更多的机器资源。Golang 语言的类型系统简单且高效,还能避免共享内存同步修改弊端。另外,Golang 语言还自带垃圾回收器,不需要用户自己管理内存。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。