我们写C 的时候,假如用到多进程,我们通常都会用信号,管理等来进程进程间的通信, 那么golang是怎么实现这个的呢?? 直接看码说话吧
package main
import (
"fmt"
"time"
)
func main() {
timeout := make(chan bool, 1)
go func() {
fmt.Println("------------ 子进程1--------------")
t1 := time.Now().UnixNano()
fmt.Println(t1)
fmt.Println("这个一定会执行")
time.Sleep(3 * time.Second)
// timeout <- true
timeout <- true
}()
fmt.Println("首先逻辑还是响应 main 函数")
go func() {
fmt.Println("------------ 子进程2--------------")
t2 := time.Now().UnixNano()
fmt.Println(t2)
fmt.Println("相当于fork一个子进程在进行")
}()
ch := make(chan int)
select {
case <-ch:
case <-timeout:
fmt.Println("------------ 回到main函数 --------------")
fmt.Println("task is timeout!")
}
fmt.Println("main 函数本身的输出")
}
我们执行代码看一看结果
首先逻辑还是响应 main 函数
------------ 子进程2--------------
1471577916141068800
相当于fork一个子进程在进行
------------ 子进程1--------------
1471577916142068800
这个一定会执行
------------ 回到main函数 --------------
task is timeout!
main 函数本身的输出
分别从 纳秒的时间戳可以看出, 两个 go func() 几乎是同时执行的, 这种是golang并行处理的写法, 是直接调用系统的epoll处理流程, golang同样提供了一种监视手段去监视每个并行处理逻辑的返回, select就是这种手段
有疑问加站长微信联系(非本文作者)

代码里面的“子进程”不是子进程
你确定是你这两是子进程????
这是协程,轻量级线程!
大哥, 不要误导好不好. 可以不写,写就要负责. 新手就让老司机这样带沟去的 这叫协程, jb进程呀
看完一身冷汗,这是routine,哪里是多进程,我刚刚开始看go差点被带沟里了