wordpress商品展示插件,泰安网络优化,wordpress改后台登录路径,谷歌官方seo入门指南一、前言 新年学新语言Go系列文章已经完结#xff0c;用了最简单的例子去了解Go基础语法#xff0c;但Go最牛B的是它对并发的友好支持#xff0c;每一门语言都有它自己独特的优势#xff0c;如Java适合大型工程化项目#xff0c;Python适合做数据分析及运维脚本#xff0…一、前言 新年学新语言Go系列文章已经完结用了最简单的例子去了解Go基础语法但Go最牛B的是它对并发的友好支持每一门语言都有它自己独特的优势如Java适合大型工程化项目Python适合做数据分析及运维脚本而Go最适合用来做高并发的网络通讯PHP适合快速开发网站所以有兴趣都可以学习了解一下编程思路是互通。关于Go并发 新年学新语言Go之一 有一个概略的介绍这一系列会从最简单一些例子入手然后穿插介绍一些必要的理论。
二、例子1 执行结果无任何输出
在函数或方法前面加上关键字 go它会启动一个goroutine(协程)然后被放在队列中等待调度器来决定什么时候执行这个goroutine。然而main这个主协程已经执行完成Go进程都Over了新创建的goroutine还没有被调度执行所有大概率是无任何输出。
操作系统理论讲的是一个进程至少要包含一个线程随着进程的启动会创建第一个线程这个称为主线程goroutine也类似。 执行结果Go,Goroutine!
加上time.Sleep会让main所有的goroutine进行暂停进入Gwaiting状态然后println(Go,Goroutine!) 这个goroutine就有可能被调度执行了但这也并不是很保险可以换成调用runtime.Gosched()来暂停当前goroutine让其它goroutine有机会运行。 三、例子2 执行结果Hello,Qingcai18036!
执行结果说明了在name Qingcai18036执行之后上面那个go函数才得以被调度执行。下面更换一下最后两条语句顺序 执行结果Hello,Qingcai!
这是因为在改变name变量的值之前就给了go函数执行的机会了。
四、例子3 执行结果 这是因为for里的迭代变量name虽然会依次被赋予qingcai1,qingcai2,qingcai3但这里并发执行的go函数是在for语句执行完才执行因为for遍历非常快这时name已经指向 qingcai3了。 执行结果 将time语句放在循环内就可以在迭代完成之前给每个go函数一个执行的机会但这也不保险 执行结果 让go函数中使用的name不会受外部变量的影响go函数可以有参数声明然后将迭代变量name做为参数传递给go函数因为name变量的类型是string它是非引用类型我们把值做为参数传给函数时该值会被复制对于引用类型这样处理就没有作用了另外可以看到结果的顺序是乱的因为调度器什么时候执行goroutine是不确定的。
注相对于其它语言,Go启动一个协程语法实在是太简单了!简单就是好。