阅读 320

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

这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战

前言

了解编程语言的小伙伴一定知道,我们在为某个项目选择开发语言时,总是需要在开发速度和程序性能之间做出选择。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 语言还自带垃圾回收器,不需要用户自己管理内存。

日历打卡(8月更文挑战)

image.png

文章分类
后端
文章标签