在了解协程之前,我们先来复习下进程和线程:
1.进程:就是应用程序启动的实例。比如我们运行一个游戏,打开一个软件,就是开启了一个进程。
进程拥有代码和打开的文件资源、数据资源、独立的内存空间。
2.线程:线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。
线程拥有自己的栈空间。
3.对操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元。无论是进程还是线程,都是由操作系统进行管理的。
4.线程的五种状态:初始化、可运行、运行中、阻塞、销毁
线程不同状态之间的转化是谁来实现的呢?是JVM吗?并不是。JVM需要通过操作系统内核中的TCB(Thread Control Block)模块来改变线程的状态,这一过程需要耗费一定的CPU资源。
5.进程和线程的痛点:
1)涉及到同步锁。
2)涉及到线程阻塞状态和可运行状态之间的切换
3)实际到线程上下文的切换
以上涉及到的任何一点,都是非常耗费性能的操作,这时候协程就要登场了 。
6.什么是协程?
协程,英文Coroutines,是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。最重要的是,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。
但是Java中并没有对协程的原生支持,可以查看开源框架Kilim进行模拟。
引用文章地址:https://mp.weixin.qq.com/s/57IERpGIlvRwYCh6vSbMDA
相关推荐
协程是什么 简单点说协程是进程和线程的升级版,进程和线程都面临着内核态和用户态的切换问题而耗费许多切换时间,而协程就是用户自己控制切换的时机,不再需要陷入系统的内核态. 迭代器 迭代器就是用于迭代操作(for ...
CPP-Summit 2019 - 吴咏炜 - 深入浅出 C++20 协程.pdf
GO语言快速入门协程并发go关键字协程间通信-通道chanselect语句Go语言快速入门笔记系列传送门 协程并发go关键字 协程是什么 协程,又称微线程,纤程。英文名Coroutine。相比于线程(8M左右),协程(4K左右)占用的...
协程笔记说明协程的定义通过使用yield完成多任务greenlet进行封装来替换生成器gevent实现多任务不依赖gevent的自带延时和阻塞切换协程和线程差异进程、线程和协程对比 协程的定义 协程是python个中另外一种实现多...
C++的libco协程库源代码和课件笔记
协程(Coroutine)提供了一种避免阻塞线程并用更简单、更可控的操作替代线程阻塞的方法:协程挂起 对线程的操作进一步抽象,使原来用“异步+回调”的方式写出来的复杂代码,简化成看似同步的方式。这样我们就可以按...
Notzz App是一个简单的笔记Android应用程序,旨在描述Modern Android开发工具的使用。...协程-适用于异步等。Android体系结构组件-库的集合,可帮助您设计健壮,可测试和可维护的应用程序。 LiveData-不包含的数据对象
本来这篇文章只是用来记录一下学习异步协程爬虫的笔记,感谢CSDN的大力支持,引来了很多关注和浏览,也有很多大佬的批评指针。 事先声明:本文只是学习使用,在爬虫的实战应用中还要添加诸多限制,比如UA伪装,添加...
对python并发进行的笔记整理,个人所学习使用,主要包括多进程,多线程,协程,IO多路复用,进程线程通信等
Notzz-App::memo:一个简单的笔记应用程序,旨在演示现代Android开发工具的使用-(Kotlin,协程,状态流,依赖依赖注入,Jetpack数据存储,架构组件,MVVM,房间,材料设计组件)
Hyperf协程框架 v2.2.40.zip
imi 协程开发框架 v2.1.53.zip
imi协程开发框架 v2.1.47.zip
* [19 协程](#19-协程) * [20 闭包](#20-闭包) * [21 lambda函数](#21-lambda函数) * [22 Python函数式编程](#22-python函数式编程) * [23 Python⾥的拷⻉](#23-python⾥的拷⻉) * [24 Python垃圾回收机制](#...
协程库state threads library(以下简称st)是一个基于setjmp/longjmp实现的C语言版用户线程库或协程库(user level thread)。 本文详细说明了协程库的特点及工作原理,结合代码很容易理解。 srs流媒体服务器就是基于...
根据b站千峰教育所做的笔记 1.Python基础 1.1使用基础 1.2PIP使用 1.3内置函数/变量/模块 1.4代码输入基础知识细节 1.5列表 1.6元组 1.7字典 1.8集合 1.9公共方法 1.10推导式 1.11函数 1.12文件操作 1.13语法错误与...
个人学习golang笔记,从各种教程中总结而来,作为入门参考。目录如下 目录 1. 入门 1 1.1. Hello world 1 1.2. 命令行参数 2 2. 程序结构 3 2.1. 类型 4 2.1.1. 命名类型(named type)与未命名类型(unamed ...
在子协程中return,作用是退出子协程,无论子协程的代码是否在main()中 func main() { go func() { fmt.Println("子协程") return fmt.Println("子协程2") }() time.Sleep(time.Second*2) fmt.Println("主...
的非对称协程库。 - 事后之见 - 轻量级数据处理骨架 - RobotGo,Go Native跨平台系统自动化 - 规范的 libwebsockets.org websocket 库 - 通过网络共享您的终端 - 高性能分布式存储 —— - 基本库全部由 gozfree 用 c ...