首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Kotlin 简介 ( 概念 | 作用 | 创建 Android 工程并进行相关配置开发 | 异步任务与对比 )

文章目录 一、概念 二、作用 三、创建 Android 工程并进行相关配置 1、创建 Android 工程 2、配置环境 3、布局文件 4、异步任务代码示例 5、代码示例 6、完整代码示例...四、异步任务与对比 一、概念 ---- Coroutine 是 Kotlin 语言 中新出现的概念 , 在 Java 语言中没有 ; 是 基于 线程 的 , 是 轻量级 线程 ;...二、作用 ---- 主要作用如下 : 处理耗时任务 : 耗时任务 通常需要 阻塞主线程 , 线程量级太重 , 耗时任务 推荐在中执行 ; 保证主线程安全 : 从主线程中 安全地调用可能会挂起的函数...; 异步任务 AsyncTask 也可以处理耗时操作 , 避免耗时任务阻塞线程 , 但是在 Android 11 中 , 官方规定 该 api 已过时 , 被标记为弃用状态 , 建议使用 java.util.concurrent...包下的 Executor,ThreadPoolExecutor,FutureTask 取代 AsyncTask ; 三、创建 Android 工程并进行相关配置 ---- 1、创建 Android

2.9K20

框架(libcopp) 小幅优化

最近抽空继续对 libcopp 进行了更新和小幅优化。 首先的Merge了 boost.context 1.70.0 。...不过另外它增加了新的平台支持 mips64,我目前还是简单导入了,但是平台检测工具还没有写,如果要使用是可以通过编译参数切过去的,不过我感觉没人会这么用吧?我自己用都得看一下之前怎么写的。...最后一个小优化是 C++11 以上默认使用unordered_map而不是map去存储任务了,这对cache友好一些。之前计划的对 C++20 的接入暂时还没时间做,后面再说吧。...新版本想直接使用的童鞋也可以直接clone v2 分支。 比较郁闷的是新的API和流程我都加了单元测试,然而覆盖率下降了,( T _ T ), 后面我再补一点吧。

57230
您找到你想要的搜索结果了吗?
是的
没有找到

【Kotlin 取消 ② ( CPU 密集型任务取消 | 使用 isActive 判定状态 | 使用 ensureActive 函数取消协 | 使用 yield 函数取消协 )

文章目录 一、CPU 密集型任务取消 二、使用 isActive 判定当前 CPU 密集型任务是否取消 三、使用 ensureActive 自动处理退出 四、使用 yield 函数检查状态并处理取消操作..., 是无法 直接取消的 ; 此类任务一直在 抢占 CPU 资源 , 使用 cancel 函数 , 无法取消该类型的 任务 ; 在进行 CPU 密集计算时 , 中间会有大量的中间数据 , 如果中途取消...18:45:34.001 I 退出作用域 二、使用 isActive 判定当前 CPU 密集型任务是否取消 ---- 处于 活跃 Active 状态 时 , 当调用 Job#cancel...) 可以进行判定 ; 当所有的子执行完毕会后 , 会进入 已取消 Cancelled 状态 , 已取消 Cancelled 状态 通过 ( isCompleted == true ) 进行判定...:23.680 I 退出作用域 四、使用 yield 函数检查状态并处理取消操作 ---- 在中 , 可以使用 yield() 函数 , 检查当前的状态 , 如果已经调用 cancel

1K20

使用Go池来优化并发任务处理

在今天的文章中,我要向大家介绍一个强大而实用的功能 - 使用Go实现的池。池是一个极为有效的工具,可以帮助我们在编写并发程序时实现更优的资源控制和调度。 什么是池?...首先,我们需要理解什么是池。池是一种结构,用来管理和限制程序中并发的数量。这种机制可以有效防止在大量任务并发处理时由于开启过多的导致的资源耗尽问题。...池在各种场景中都有其应用价值,例如在处理大量网络请求或进行大规模计算的场合。通过限制并发的数量,我们可以避免过度使用资源,减少上下文切换的开销,并提高整体的处理性能。...相比于直接使用池帮助我们实现了对并发任务的细粒度控制,以及优化了资源利用。此外,池的实现也使得我们的代码更具有结构性,易于理解和维护。...总的来说,Go语言实现的池是一个强大而实用的工具,值得每一个Go开发者在自己的工具箱中拥有。无论是对于大型项目,还是小型项目,都可以通过使用池来提高程序的性能和稳定性。

75430

python-高级编程-的测试和性能优化(一)

是一种高效的异步编程方式,但的性能也受到一些因素的影响,如的数量、的调度等。在实际应用中,我们需要测试的性能,并进行优化,以提高应用的吞吐量和响应速度。...一、性能测试性能测试通常可以分为两个方面:数量测试和协调度测试。数量测试是指测试在不同的数量下,的性能表现;调度测试是指测试在不同的调度算法下,的性能表现。...数量测试数量测试可以通过编写一个简单的测试程序来实现。以下是一个简单的测试程序,用于测试不同数量的在同样的任务下的性能表现。...在run函数中,我们启动了不同数量的do_something,并等待它们完成。我们使用asyncio.run函数来运行run函数,并使用time模块来计算运行时间。...我们在for循环中测试了不同数量的,从100到1000。在运行测试程序时,我们可以看到每个协的平均运行时间和协数量。

36020

python-高级编程-的测试和性能优化(三)

二、性能优化性能优化通常可以从以下几个方面进行:减少的数量在实际应用中,如果的数量过多,会导致的调度效率降低,从而影响应用的性能。因此,可以通过减少的数量来提高应用的性能。...优化的调度算法的调度算法会直接影响的性能表现。因此,可以通过选择合适的调度算法来提高应用的性能。优化的代码实现的代码实现也会影响的性能表现。...因此,可以通过优化的代码实现来提高应用的性能。以下是一些优化代码实现的方法:使用asyncio.create_task函数来启动。...如果必须要使用同步原语,可以使用asyncio.Lock和asyncio.Condition等异步原语来代替。使用asyncio.Queue等异步数据结构来进行程之间的通信。...这样可以避免使用同步原语,从而提高应用的性能。以上是一些优化代码实现的方法,具体优化策略需要根据具体应用场景进行选择。

16340

什么是_什么时候使用和线程

,有几个特点: 协同,因为是由程序员自己写的调度策略,其通过协作而不是抢占来进行切换 在用户态完成创建,切换和销毁 ⚠️ 从编程角度上看,的思想本质上就是控制流的主动让出(yield)和恢复(resume...所以,yield就是yield,下次谁再说yield是,我肯定把你xxxx。 PHP 前面介绍的时候说了,需要程序员自己去编写调度机制,下面我们来看这个机制怎么写。...0)生成器正确使用 既然生成器不能像函数一样直接调用,那么怎么才能调用呢?...你可以使用下面的代码来测试: <?...3)堆栈 鸟哥文中还有一个堆栈的例子。 我们上面说过了,如果在函数中使用了yield,就不能当做函数使用。 所以你在一个函数中嵌套另外一个函数: <?

67320

-无栈(下)

case __LINE__: #define LC_END(s) } typedef unsigned short lc_t; //用于定义一个描述protothread实例的结构体,每一个无栈用这个结构体进行描述...pt描述一个里面含有lc_t类型成员变量,本质上是一个unsigned short类型     ·整个PT,在创建之前需要调用PT_INIT进行初始化,初始化之后调用PT_BEGIN拉起...,通常调用PT_SCHEDULE的是主控,主控决策调度哪个协程之后通过PT_SCHEDULE进行调度     我们尝试用ProtoThread写一个多玩家登陆的代码,如下: #include "...,因此进程可以通过共享内存在重启的环境下,也不会导致中断; ·但是这种恢复也是有条件的,在protothread中是用行号进行恢复,若是用到的源文件的行号出现改变,则可能执行错乱,如下所示...云风库源码分析 编程沉思录——libco源码分析 libco源码地址 libco性能对比 达夫设备 Label As Values标签变量 ucontext族函数的使用及原理分析 FSTENV

75920

的特点是利用任务的阻塞时间去处理其他任务 处理任务的是线程,而是单线程,占用资源由大到小排:多进程>多进程> gevent模块封装greenlet模块,greenlet模块封装yield 在...gevent里使用tiem.sleep会失效,需要使用gevent.sleep,或者使用monkey补丁实现替换 如代码因为monkey.patch_all()补丁问题报错,将from gevent import...monkey和补丁代码放到最前面尝试 使用完成多任务三个例子: 使用yield实现 import time def func1(): while True: print...func2() while True: next(t1) next(t2) if __name__ == "__main__": main() 使用...2---") g2 = gevent.spawn(func2, 5) print("---3---") g3 = gevent.spawn(func3, 5) print("---4---") # 的最大特点就是利用某个任务阻塞的时间去处理其他任务

52420

【Kotlin 异常处理 ② ( SupervisorJob | supervisorScope 作用域构建器函数 )

文章目录 一、SupervisorJob 二、supervisorScope 作用域构建器函数 在上一篇博客介绍了 异常处理 【Kotlin 异常处理 ① ( 根异常处理..., 会将异常 传递给 父 , 父会执行如下操作 : ① 取消子 : 不仅仅取消产生异常的子 , 该父下所有的子都会取消 ; ② 取消父 : 将父本身取消 ; ③ 向父的父传播异常...; SupervisorJob 类型的 子 自己处理异常 , 不会向上传递异常 ; Android 使用场景 : 某个 View 组件由 多个协程控制 , 如果其中某个协崩溃 , 其它仍正常工作...() 作为参数 ; // 在该作用域下创建的都是 SupervisorJob val supervisorScope = CoroutineScope(SupervisorJob()) 使用该...作用域构建器函数 ---- 使用 supervisorScope 作用域构建器函数 , 可以直接创建一个 SupervisorScope 作用域 , 在该作用域中定义的 , 都是 SupervisorJob

65410

及Python中的

1 1.1的概念 ,又称微线程,纤。英文名Coroutine。一句话说明什么是线程:是一种用户态的轻量级线程。...1.2 的优缺点 的优点:   (1)无需线程上下文切换的开销,避免了无意义的调度,由此可以提高性能(但也因此,程序员必须自己承担调度的责任,同时,也失去了标准线程使用多CPU的能力)...(2)进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序 2 Python中如何实现 2.1 yield实现   前文所述“子程序(函数)在执行过程中可以中断去执行别的子程序;别的子程序也可以中断回来继续执行之前的子程序...使用yield实现操作例子: 1 #!...实现,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级

1.3K20

4.Go 是什么? Go 是与其他函数或方法一起并发运行的函数或方法。Go 可以看作是轻量级线程。与线程相比,创建一个 Go 的成本很小。...因此在 Go 应用中,常常会看到有数以千计的 Go 并发地运行。 5.go 和 线程的优势对比 相比线程而言,Go 的成本极低。堆栈大小只有若干 kb,并且可以根据应用的需求进行增减。...所有这一切都在运行时进行,作为程序员,我们没有直接面临这些复杂的细节,而是有一个简洁的 API 来处理并发。 Go 使用信道(Channel)来进行通信。...与函数不同,程序控制不会去等待 Go 执行完毕。在调用 Go 程之后,程序控制会立即返回到代码的下一行,忽略该的任何返回值。 如果希望运行其他 Go ,Go 主必须继续运行着。...信道可用于在其他结束执行之前,阻塞 Go 主

68250

【Kotlin 底层实现 ② ( 调度器 | 任务泄漏 | 结构化并发 )

文章目录 一、调度器 二、任务泄漏 三、结构化并发 一、调度器 ---- 是在 调度器 中运行的 , 在中有 3 种调度器 : Dispatchers.Main 调度器 : 在 主线程...耗时任务 , 主要侧重算法消耗 ; 使用场景 : 数据排序 , 数据解析 , 数据对比 等耗时算法操作 ; 这里特别注意 , 在中调用 挂起 suspend 函数 , 必须在 Dispatchers.Main...避免 任务泄漏 的情况发生 ; 任务泄漏 与 内存泄漏 类似 ; 三、结构化并发 ---- 结构化并发 使用场景 : 任务取消 : 在不需要任务的时候 , 取消协任务 ; 追踪任务...任务 , CoroutineScope 作用域 可以取消 所有由其启动的任务 ; 常见的 CoroutineScope 作用域 : GlobalScope : 该作用域是 进程级别的...Activity 中使用 , 与 Activity 生命周期绑定 ;

56320

Kotlin-特殊的阻塞

阻塞是种特殊的启动方式,一般是用 runBlocking{} 扩起来一段。...首先是父得到执行,然后才是子。 重点是这两段都在同一个线程main里完成。这里就带来一个有趣的问题, runBLocking{}和平时常用的launch有什么区别?...没有的话就使用默认的eventloop。EventLoop是里对阻塞型coroutine进行调度的默认调度器。runBlocking和launch的主要区别就靠EventLoop实现。...在创建完coroutine后就进入派发流程了,这部分和Kotlin-一个的生命周期中的逻辑比较相似,下面也会讲到。...这个问说明,runBLocking{}这种,它的运行逻辑是先把父放队列里,然后取出来执行,执行完毕再把子入队,再出队子,用同样的方式递归。

2.3K20
领券