Go语言入门心法(七): 并发与通道

编程入门 行业动态 更新时间:2024-10-19 16:26:40

Go语言入门<a href=https://www.elefans.com/category/jswz/34/1756517.html style=心法(七): 并发与通道"/>

Go语言入门心法(七): 并发与通道



Go语言入门心法(一): 基础语法

Go语言入门心法(二): 结构体

Go语言入门心法(三): 接口

Go语言入门心法(四): 异常体系

 Go语言入门心法(五): 函数



并行与并发认知升维:


go语言中协程与并发认知

(1) go语言的最大特点,是从语言层面支持并发
(2) Go语言的最大优势在于并发与性能,其性能可以媲美C和C++,并发在网络编程中更是至关重要
(3) 有事光靠硬件的提升无法满足高并发的需求的,因此需从程序的角度来解决高并发问题
(4) 通常并发指在同一段时间内,程序可以执行多个任务;几乎所有的语言都支持并发,而go语言最大的特点就是从语言层面支持并发
(5) 并发编程通常包括: 多线程编程,多进程编程,一家分布式编程
(6) 调用栈: 调用栈是计算机科学中存储有关正在运行的子程序的消息栈,经常被用于存放子程序的返回地址。在调用任何子程序中,主程序都必须暂存子程序运行完毕后应该返回到的地址。
                因此,如果被调用的子程序还要调用其他子程序,其自身的返回地址必须存入调用栈,在其自身运行完毕后再取回。
(7) 并发与并行区别
    7.1: 并行(parallelism):指在同一时刻,有多条指令在多个处理器上同时运行
    7.2: 并发(concurrency):指在同一时刻,只能有一条指令执行,但是多个进程指令被快速第轮换执行,得到宏观上有多个进程同时执行的效果,
                         但是在微观上并不是同时执行,只是把时间片分为了若干段,使得多个进程快速交替执行。
 


一: go语言并发与通道


package mainimport ("fmt""time"
)/*
go语言中协程与并发认知(1) go语言的最大特点,是从语言层面支持并发(2) Go语言的最大优势在于并发与性能,其性能可以媲美C和C++,并发在网络编程中更是至关重要(3) 有时光靠硬件的提升无法满足高并发的需求的,因此需从程序的角度来解决高并发问题(4) 通常并发指在同一段时间内,程序可以执行多个任务;几乎所有的语言都支持并发,而go语言最大的特点就是从语言层面支持并发(5) 并发编程通常包括: 多线程编程,多进程编程,分布式编程(6) 调用栈: 调用栈是计算机科学中存储有关正在运行的子程序的消息栈,经常被用于存放子程序的返回地址。在调用任何子程序中,主程序都必须暂存子程序运行完毕后应该返回到的地址。因此,如果被调用的子程序还要调用其他子程序,其自身的返回地址必须存入调用栈,在其自身运行完毕后再取回。(7) 并发与并行区别7.1: 并行(parallelism):指在同一时刻,有多条指令在多个处理器上同时运行7.2: 并发(concurrency):指在同一时刻,只能有一条指令执行,但是多个进程指令被快速第轮换执行,得到宏观上有多个进程同时执行的效果,但是在微观上并不是同时执行,只是把时间片分为了若干段,使得多个进程快速交替执行。
*/
func main() {println(`go语言中协程与并发认知(1) go语言的最大特点,是从语言层面支持并发(2) Go语言的最大优势在于并发与性能,其性能可以媲美C和C++,并发在网络编程中更是至关重要(3) 有时光靠硬件的提升无法满足高并发的需求的,因此需从程序的角度来解决高并发问题(4) 通常并发指在同一段时间内,程序可以执行多个任务;几乎所有的语言都支持并发,而go语言最大的特点就是从语言层面支持并发(5) 并发编程通常包括: 多线程编程,多进程编程,分布式编程(6) 调用栈: 调用栈是计算机科学中存储有关正在运行的子程序的消息栈,经常被用于存放子程序的返回地址。在调用任何子程序中,主程序都必须暂存子程序运行完毕后应该返回到的地址。因此,如果被调用的子程序还要调用其他子程序,其自身的返回地址必须存入调用栈,在其自身运行完毕后再取回。(7) 并发与并行区别7.1: 并行(parallelism):指在同一时刻,有多条指令在多个处理器上同时运行7.2: 并发(concurrency):指在同一时刻,只能有一条指令执行,但是多个进程指令被快速第轮换执行,得到宏观上有多个进程同时执行的效果,但是在微观上并不是同时执行,只是把时间片分为了若干段,使得多个进程快速交替执行。在go语言中,编写并发程序时非常简单的,它不需要引入第三方额外的库,创建goroutine,只需要在函数调用语句前面添加go关键字,就可以创建并行执行单元。开发人员无须了解任何执行细节,调度器会自动将其安排到合适的线程上去执行;在并发编程里,通常要将一个过程分割成几块,然后让不同的goroutine各自负责其中的一块工作;`)println("该程序有三个模块,分别是main,Task1,Task2,这里使用了两个关键字go将task1和task2改变成了两个并的模块")println()go goroutineTask1()go goroutineTask2()for {fmt.Println(time.Now().Format("15:04:05"), "正在处理主进程的任务")time.Sleep(time.Second * 3)}}// goroutineTask1 定义任务执行函数
func goroutineTask1() {for {fmt.Println(time.Now().Format("15:04:05"), "正在执行Task1任务")time.Sleep(time.Second * 1) // 休眠1秒}
}// goroutineTask2 定义任务执行函数
func goroutineTask2() {for {fmt.Println(time.Now().Format("15:04:05"), "正在执行Task2任务")time.Sleep(time.Second * 2) // 休眠1秒}
}

运行效果:


D:\program_file_worker\go1.20 #gosetup
GOPATH=D:\program_file_worker\go1.20\bin;C:\Users\Administrator\go #gosetup
D:\program_file_worker\go1.20\bin\go.exe build -o C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_OOPGoroutineToChannelGrammar_go.exe D:\program_file\go_workspace\org.jd.data\goroutine\OOPGoroutineToChannelGrammar.go #gosetup
C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_OOPGoroutineToChannelGrammar_go.exe

      go语言中协程与并发认知
      (1) go语言的最大特点,是从语言层面支持并发
                        (2) Go语言的最大优势在于并发与性能,其性能可以媲美C和C++,并发在网络编程中更是至关重要

                        (3) 有时光靠硬件的提升无法满足高并发的需求的,因此需从程
序的角度来解决高并发问题
                        (4) 通常并发指在同一段时间内,程序可以执行多个任务;几乎所有的语言都支持并发,而go语言最大的特点就是从语言层面支持并发

                        (5) 并发编程通常包括: 多线程编程,多进程编程,分布式编程
的消息栈,经常被用于存放子程序的返回地址。在调用任何子程序中,主程序都必须暂存子程序运行完毕后应该返回到的地址。
的消息栈,经常被用于存放子程序的返回地址。在调用任何子程序中,主程序都必须暂存子程序运行完毕后应该返回到的地址。
                             因此,如果被调用的子程序还要调用其他子程序,其自身的返回地址必须存入调用栈,在其自身运行完毕后再取回。
                        (7) 并发与并行区别
                            7.1: 并行(parallelism):指在同一时刻,有多条指令在多个处理器上同时运行
                             7.2: 并发(concurrency):指在同一时刻,只能有一条指令执行,但是多个进程指令被快速第轮换执行,得到宏观上有多个进程同时执行的效果,
                                 但是在微观上并不是同时执行,只是把时间片分为了若干段,使得多个进程快速交替执行。
      在go语言中,编写并发程序时非常简单的,它不需要引入第三方额外的库,创建goroutine,只需要在函数调用语句前面添加go关键字,
      就可以创建并行执行单元。开发人员无须了解任何执行细节,调度器会自动将其安排到合适的线程上去执行;
      在并发编程里,通常要将一个过程分割成几块,然后让不同的goroutine各自负责其中的一块工作;

该程序有三个模块,分别是main,Task1,Task2,这里使用了两个关键字go将task1和task2改变成了两个并的模块

21:31:14 正在处理主进程的任务
21:31:14 正在执行Task1任务
21:31:14 正在执行Task2任务

21:31:16 正在执行Task1任务
21:31:17 正在执行Task1任务
21:31:17 正在执行Task2任务
21:31:18 正在处理主进程的任务
21:31:18 正在执行Task1任务
21:31:19 正在执行Task2任务
21:31:19 正在执行Task1任务
21:31:20 正在执行Task1任务
21:31:21 正在处理主进程的任务
21:31:21 正在执行Task2任务
21:31:21 正在执行Task1任务

Process finished with the exit code -1073741510 (0xC000013A: interrupted by Ctrl+C)


更多推荐

Go语言入门心法(七): 并发与通道

本文发布于:2023-12-07 12:46:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1671240.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:心法   入门   通道   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!