golang协程介绍和理解
1、介绍协程前先需要了解进程和线程
进程:程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。
线程:进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
进程和线程的关系:一个进程可以创建和撤销多个线程;同一个进程中的多个线程之间可以并发执行。
2、介绍协程
协程:独立的栈空间,共享堆空间,调度由用户自己控制,本质上有点类似于用户级线程,这些用户级线程的调度也是自己实现的。
线程和协程的关系:一个线程上可以跑多个协程,协程是轻量级的线程。
3、介绍goroutine
本质上,goroutine就是协程。不同的是,Golang在runtime、系统调用等多方面对goroutine调度进行了封装和处理。
Go语言编程中你不需要去自己写进程、线程、协程,你的技能包里只有一个技能goroutine。当你需要让某个任务并发执行的时候,你只需要把这个任务包装成一个函数,开启一个goroutine去执行这个函数。
4、使用goroutine
Go语言中使用goroutine非常简单,只需要在调用函数的时候在前面加上go关键字,就可以为一个函数创建一个goroutine。例如:
func hello() {fmt.Println("Hello Goroutine!")
}
func main() {go hello() // 启动另外一个goroutine去执行hello函数fmt.Println("main goroutine done!")time.Sleep(time.Second)
}
执行会先打印main goroutine done!,然后紧接着打印Hello Goroutine!。因为我们在创建新的goroutine的时候需要花费一些时间,而此时main函数所在的goroutine是继续执行的。
参考文章:http://www.topgoer.com/
golang协程介绍和理解相关推荐
- C++ 协程介绍[译]
此文翻译自:COROUTINES INTRODUCTION 在很长时间的争论,反对和准备后,WG21(ISO C++ Committee) 统一了在C++20中coroutines (协程)的具体实现 ...
- golang 协程同步 简介
目录 协程概念简要理解 为什么要做同步 协程的几种同步方法 Mutex channel WaitGroup 协程概念简要理解 协程类似线程,是一种更为轻量级的调度单位,但协程还是不同于线程的,线程是系 ...
- Python与Golang协程异同
背景知识 这里先给出一些常用的知识点简要说明,以便理解后面的文章内容. 进程的定义: 进程,是计算机中已运行程序的实体.程序本身只是指令.数据及其组织形式的描述,进程才是程序的真正运行实例. 线程的定 ...
- 深入浅出 Golang 协程池设计
使用Go语言实现并发的协程调度池阉割版,本文主要介绍协程池的基本设计思路,目的为深入浅出快速了解协程池工作原理,与真实的企业协程池还有很大差距,本文仅供学习参考. 一.何为并发,Go又是如何实现并发? ...
- Unity3D协程介绍 以及 使用
作者ChevyRay ,2013年9月28日,snaker7译 原文地址:http://unitypatterns.com/introduction-to-coroutines/ 在Unity中,协 ...
- golang 数组 最后一个_面试必问:Golang高阶Golang协程实现原理
1 01 引言 实现并发编程有进程,线程,IO多路复用的方式.(并发和并行我们这里不区分,如果CPU是多核的,可能在多个核同时进行,我们叫并行,如果是单核,需要排队切换,我们叫并发). 1.1 进程和 ...
- go 怎么等待所有的协程完成_怎么关闭golang协程
怎么关闭golang协程 发布时间:2020-06-10 10:43:33 来源:亿速云 阅读:284 作者:Leah 这篇文章给大家分享的是关闭golang协程的方法.小编觉得挺实用的,因此分享给大 ...
- Golang 协程的使用方法
Golang 协程正确的使用方法 错误的使用方法 package main // 错误使用案例 import ("time""fmt" ) var c1 cha ...
- Golang 协程顺序打印
Golang 协程顺序打印 A.B 两个协程分别打印 1.2.3.4 和 A,B,C,D 实现:定义 A.B 两个 channal,开 A.B 两个协程,A 协程输出[1, 2, 3, 4].B 协程 ...
最新文章
- UML之交互图(协作图和顺序图)
- UA MATH567 高维统计专题2 Low-rank矩阵及其估计1 Matrix Completion简介
- ABAP中P类型介绍
- ExtJs UI框架学习三
- postfix导致maillog填满磁盘空间的巨坑!
- weblogic12.1.3安装
- Spring集成JavaMail并利用线程池发送邮件
- python中的字典及注意事项
- 系统架构师学习笔记-多媒体基础知识
- 基于Givens变换的QR分解
- 利用Apperance协议定义View的全局外观
- 常见的C++关键字有哪些?
- 全网首发:gstreamer如何接入RTSP流(IP摄像头)的代码范例
- Oracle database 11g release2发布
- ASP.Net之发展史
- Android 请求Root权限代码
- Unity的ScrollRect如何裁切粒子特效,以及如何使粒子特效显示在UI上
- wlan网页登录认证原理
- 修炼魅力女人“诱惑”术
- WordPress博客主题 大前端DUX6.1主题绿色版
热门文章
- java 脚本引擎性能_Java SE 6 入门之脚本引擎加大程序性能
- mysql安全性实验心得_mysql安全小结
- Python基础教程:pd.drop_duplicates删除重复行的方法
- Python中必备知识点:对字符编码的基本操作
- Python判断字符串是否为字母或者数字
- python两种生成md5的方法
- python中的try...except...finally函数
- python **运算符及多参数传参
- urllib库添加headers的一般方法
- 新手怎么读懂一个中型的Django项目