并发编程
并发指在同一时间内可以执行多个任务。并发编程包含多线程编程、多进程编程、分布式程序等。
-
go语言的并发是指多线程并发
-
goroutine类似线程,可以根据需要创建多个goroutine并发工作
-
goroutine是由go语言的编译器运行时(runtime)调度完成,而线程是由操作系统调度完成
-
多个goroutine之间通过channel通道进行通信。goroutine和channel是go语言实现CSP(Communicating Sequential Process)并发模式的基础。
并发与并行
- 概念
并发:在不同时间点,把任务交给处理器处理。在同一时间点,任务并不会同时运行。
并行:把每一个任务分配给单个逻辑处理器独立完成。在同一个时间点,任务一定是同时运行。
并发与并行的区别:在同一个时间点,任务是否同时执行。
例子
打电话与吃饭。在吃饭时,电话来了,需要停止吃饭去接电话,电话接完后回来继续吃饭。这个过程是并发执行。在吃饭时,电话来了,边吃饭边接电话。这个过程是并行执行。
在GOMAXPROCS数量与任务数相等时(>=),go程序可以做到并行执行。但一般情况下,go程序都是并发执行。