GoLang语言学习第一篇

86 阅读3分钟

补一手Go学习笔记,大家千万不要像我一样堆在一起写,又赶质量又不高

首先是我为什么要学习Go

首先作为使用Java作为主要开发语言的程序员,在Java8+Spring全家桶摸爬滚打两年时间,在看过一些Go的代码之后深感Go的语法简洁,减少了很多 Java 中复杂的概念和结构,使得开发者能够更加高效地编写代码。其次Go语言使用静态类型检查,这有助于减少在运行时的错误。而 Java 是动态类型检查,意味着部分错误在运行时才会暴露。最重要的是并发性能,由于协程的概念,Golang 天生能更好支持并发编程,其并发模型更加高效,能够充分利用多核处理器的性能。而 Java 虽然也支持并发编程,但相对于 Golang 在性能和简洁性方面有所不足。基于这些优点,加上Java开发实在是太多太卷。实习面试官说邮箱还有几百份简历没有看时,我就知道我该润了。

为什么Go能更好支持并发编程

协程和线程都是用于实现并发编程的技术,但它们之间有一些关键差异。协程是一种用户态的轻量级线程,而线程是操作系统内核控制的。在这些差异中,协程在以下方面比线程具有优势:

1. 资源开销

协程比线程更轻量级,创建、维护和销毁协程的开销相对较小。线程需要操作系统内核进行调度和管理,因此需要更多的内存和 CPU 资源。

2. 调度控制

协程的调度完全由用户控制,这意味着开发者可以更精细地管理协程的执行,从而优化程序的性能。相比之下,线程的调度是由操作系统内核控制的,开发者对线程调度的控制能力有限。

3. 上下文切换

由于协程是在用户空间中执行的,因此上下文切换的开销相对较小。相比之下,线程的上下文切换需要操作系统内核的参与,开销较大。

4. 并行性能

协程可以利用 CPU 资源更有效地执行多个任务。因为协程是轻量级的,所以可以创建更多的协程来处理任务,而不会像线程那样导致过多的上下文切换开销。

5. 适用场景

协程更适合用于处理大量 I/O 密集型任务,如网络编程、爬虫等。线程在处理计算密集型任务时表现更好。

上面这些网上都能搜到的,下面我说说我自己的理解,感觉线程和协程之于并发,有点像EJB项目和SSM\SpringBoot项目之于web开发。EJB 虽然在早期企业级应用开发中具有一定的优势,但是随着技术的发展,EJB 在很多方面已经不能满足开发者对敏捷性、轻量级和高效能的需求。