Golang学习笔记15:并发编程之深入协程
协程与线程的区别
协程和线程质的不同(??存疑
协程的特点:
- 该任务的业务代码主动要求切换,即让出执行权
- 发生了IO,导致执行阻塞
只有这两种情况会发生协程出让出执行权
而线程一般是时间片。
线程的java代码
public class thread {
public static void main(String[] args){
new Thread(new Test_thread()).start();
new Thread(new Test_thread2()).start();
}
}
class Test_thread implements Runnable{
public void run(){
for(int i = 0 ; i < 100 ; i ++){
System.out.println("thread1:" + i);
}
}
}
class Test_thread2 implements Runnable{
public void run(){
for(int i = 100 ; i < 200 ; i ++){
System.out.println("thread 2:" + i);
}
}
}
线程运行来回切换。
这个切换是一个比较大的开销
Golang的协程
package main
import (
"fmt"
"strconv"
"time"
)
func main() {
//用匿名函数的方法开协程
//协程1
go func() {
for i := 1; i < 100; i ++ {
fmt.Println("routine 1 :" + strconv.Itoa(i))
}
}()
//协程2
go func() {
for i := 100 ; i < 200 ; i ++ {
fmt.Println("routine 2 :" + strconv.Itoa(i))
}
}()
time.Sleep(time.Second)
}
但是好像和线程运行一样也会切换,可能是Golang新版本和教程有出入,等之后看Golang源码的时候记得关注协程和线程方面。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 赛 の 任意门!
评论
ValineGitalk