如果了解了GMP模型之后,自然了解go的并发特点,协程之间都可能是多线程并发执行的,通过开协程就可以实现并发:
package main
import (
"fmt"
"strconv"...,GMP模型下,协程一定是并发的,但不一定是并行的
看代码可以看到,我额外加了一个sleep,那是因为main协程如果结束运行了,子协程也会直接结束,sleep等待子协程执行一会儿,这样才能打印出数据...,可看到我在for循环中增加了一个sleep,sleep的意义是让出时间片,从而去执行其他的协程进行并发 (GMP模型,如果没有让出时间片,同时所有协程都在同一个线程下时,协程之间将顺序执行,例如协程1...多开协程自然会有并发问题,我们可以通过waitGroup去控制主协程在子协程执行完之后进行操作,可以通过runtime包进行做协程并发切换,但这2个都没有涉及到变量共享问题,如何实现go的变量协程安全呢...针对基本数据类型我们还可以使用原子操作来保证并发安全
协程安全的变量类型有sync.map,atomic包等
太简单了,不讲了
本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20