在了解协程之前,我们先来复习下进程和线程:
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
相关推荐
学习Kotlin的类、扩展函数、协程等概念,可以提高开发效率和代码质量。 5. **XML布局文件**:Android应用的用户界面主要通过XML文件定义,学习如何创建控件、设置属性以及理解布局管理器(如LinearLayout、...
**C++ Libco 协程库详解** Libco 是一个专为 C++ 设计的轻量级协程库,它提供了高效、易用的协程实现,使得...通过深入学习 Libco 的源代码和课程笔记,可以更全面地了解其内部实现细节,从而在实际项目中灵活运用。
### 深入浅出 C++20 协程 #### 一、协程概念解析 ##### 1.1 协程定义 协程是一种在程序设计中的高级控制结构,它扩展了传统的子程序概念,使得函数可以在任意点挂起执行,并在稍后继续执行而不会丢失状态。协程比...
GO语言快速入门协程并发go关键字协程间通信-通道chanselect语句Go语言快速入门笔记系列传送门 协程并发go关键字 协程是什么 协程,又称微线程,纤程。英文名Coroutine。相比于线程(8M左右),协程(4K左右)占用的...
协程笔记说明协程的定义通过使用yield完成多任务greenlet进行封装来替换生成器gevent实现多任务不依赖gevent的自带延时和阻塞切换协程和线程差异进程、线程和协程对比 协程的定义 协程是python个中另外一种实现多...
学习如何在Unity中创建游戏对象、组件和脚本,以及如何利用Unity的事件系统和协程,是提升游戏开发能力的关键。 最后,学习C#不仅仅是掌握语法,还包括理解.NET框架和CLR(Common Language Runtime)的工作原理,...
- **线程是什么**:线程被称为“执行流”,它代表程序执行的路径。在多线程环境中,多个线程可以同时执行各自的任务。比如,银行的多线程场景,张三、李四、王五分别处理不同业务,他们共享同一公司资源,各自处理...
Locust是一个基于事件的性能测试工具,它使用Python的协程来处理高并发测试场景。另外,Boom是类似于ApacheBench的性能测试工具,它可以进行高负载的并发请求测试。而multi-mechanize是一个基于多进程和多线程的性能...
协程(Coroutine)提供了一种避免阻塞线程并用更简单、更可控的操作替代线程阻塞的方法:协程挂起 对线程的操作进一步抽象,使原来用“异步+回调”的方式写出来的复杂代码,简化成看似同步的方式。这样我们就可以按...
### Go语言学习笔记知识点概述 #### 一、Go语言简介 - **Go语言起源与发展历程**:Go语言是由Google在2009年发布的一种开源编程语言,旨在提高开发效率和程序性能。从2012年开始,Go语言经历了多个重要版本的迭代...
- Go语言的内存管理包括内存分配器、垃圾回收器和协程调度器的工作原理。 - Goroutine是Go语言中轻量级的线程。 - Channel是用于goroutine之间通信的机制。 - Defer用于推迟函数执行,直到包含它的函数执行完毕。 - ...
本笔记详细总结了Python 3.6.1中的关键知识点,特别是针对自动化脚本的实践应用。 1. **字符串增强**: - **f-string**:Python 3.6引入了一种新的字符串格式化方法,f-string(formatted string literals),允许...
10. 源码剖析:文档提供了对Go语言内存分配器、垃圾回收器和协程调度器的源码分析,允许开发者深入了解语言的内部工作原理。 11. 工具和测试:Go语言提供了一系列的工具来支持开发,如gdb调试工具和测试框架,以及...
由于主线程不允许执行耗时操作,因此Android引入了AsyncTask、IntentService、Handler/Looper机制以及现在推荐的协程(Coroutines)来实现后台任务。 十、权限管理 Android系统采用权限模型来保护用户数据安全。...
Notzz-App是一个基于现代Android开发技术构建的简单笔记应用示例。这个项目的主要目标是展示如何使用一系列先进的工具和框架来实现一个功能完备的应用。以下是这个应用涉及到的关键技术点: 1. **Kotlin**: Kotlin...
6. "异步处理与多线程.txt" - 解释了如何在Android中处理耗时操作,如使用AsyncTask、Handler或协程等。 7. "Android性能优化策略.pdf" - 提供了提高应用性能和用户体验的各种技巧,包括内存管理、渲染优化等。 8. ...
imi 提供了完善的协程调度机制,支持协程间的通信,如 Channel、Event、Task 等,这些工具使得在协程间传递数据变得简单而高效。例如,Channel 可以实现协程间的同步通信,而 Task 则可以在不同协程之间分发任务,...
### 协程库State Threads Library (ST) 学习笔记 #### 一、引言 在探讨协程库State Threads Library(简称ST)之前,我们首先需要了解几个基础概念:协程、用户线程以及它们如何帮助提升软件的并发性能。 #### 二...
Notzz App是一个简单的笔记Android应用程序,旨在描述Modern Android开发工具的使用。...协程-适用于异步等。Android体系结构组件-库的集合,可帮助您设计健壮,可测试和可维护的应用程序。 LiveData-不包含的数据对象