当前位置: 首页 > news >正文

阿里云网站建设的步骤过程做网站如何更新百度快照

阿里云网站建设的步骤过程,做网站如何更新百度快照,1w粉丝接广告多少钱,区块链网站开发体app开发1 它是什么#xff08;协程 和 Kotlin协程#xff09; 1.1 协程是什么 维基百科#xff1a;协程#xff0c;英文Coroutine [kəru’tin] #xff08;可入厅#xff09;#xff0c;是计算机程序的一类组件#xff0c;推广了协作式多任务的子程序#xff0c;允许执行被…1 它是什么协程 和 Kotlin协程 1.1 协程是什么 维基百科协程英文Coroutine [kəru’tin] 可入厅是计算机程序的一类组件推广了协作式多任务的子程序允许执行被挂起与被恢复。 作为Google钦定的Android开发首选语言Kotlin协程并不是 Kotlin 提出来的新概念目前有协程概念的编程语言有Lua语言、Python语言、Go语言、C语言等它只是一种编程思想不局限于特定的语言。 而每一种编程语言中的协程的概念及实现又不完全一样本次分享主要讲Kotlin协程。 1.2 Kotlin协程是什么 Kotlin官网协程是轻量级线程 可简单理解一个线程框架是全新的处理并发的方式也是Android上方便简化异步执行代码的方式 类似于 Java线程池 AndroidHandler和AsyncTaskRxJava的Schedulers 注Kotlin不仅仅是面向JVM平台的还有JS/Native如果用kotlin来写前端那Koltin的协程就是JS意义上的协程。如果仅仅JVM 平台那确实应该是线程框架。 1.3 进程、线程、协程比较 可通过以下两张图理解三者的不同和关系 2 为什么选择它协程解决什么问题 异步场景举例 第一步接口获取当前用户token及用户信息第二步将用户的昵称展示界面上第三步然后再通过这个token获取当前用户的消息未读数第四步并展示在界面上 2.1 现有方案实现 apiService.getUserInfo().enqueue(object :CallbackUser{override fun onResponse(call: CallUser, response: ResponseUser) {val user response.body()tvNickName.text user?.nickNameapiService.getUnReadMsgCount(user?.token).enqueue(object :CallbackInt{override fun onResponse(call: CallInt, response: ResponseInt) {val tvUnReadMsgCount response.body()tvMsgCount.text tvUnReadMsgCount.toString()}})} })现有方案如何拿到异步任务的数据得不到就毁掉哈哈哈就是通过回调函数来解决。 若嵌套多了这种画风是不是有点回调地狱的感觉俗称的「callback hell」 2.2 协程实现 mainScope.launch {val user apiService.getUserInfoSuspend() //IO线程请求数据tvNickName.text user?.nickName //UI线程更新界面val unReadMsgCount apiService.getUnReadMsgCountSuspend(user?.token) //IO线程请求数据tvMsgCount.text unReadMsgCount.toString() //UI线程更新界面 }suspend fun getUserInfoSuspend() :User? {return withContext(Dispatchers.IO){//模拟网络请求耗时操作delay(10)User(asd123, userName, nickName)} }suspend fun getUnReadMsgCountSuspend(token:String?) :Int{return withContext(Dispatchers.IO){//模拟网络请求耗时操作delay(10)10} }红色框框内的就是一个协程代码块。 可以看得出在协程实现中告别了callback所以再也不会出现回调地狱这种情况了协程解决了回调地狱 协程可以让我们用同步的代码写出异步的效果这也是协程最大的优势异步代码同步去写。 小结协程可以异步代码同步去写解决回调地狱让程序员更方便地处理异步业务更方便地切线程保证主线程安全。 它是怎么做到的 3 它是怎么工作的协程的原理浅析 3.1 协程的挂起和恢复 挂起非阻塞式挂起 suspend 关键字它是协程中核心的关键字是挂起的标识。 下面看一下上述示例代码切换线程的过程 每一次从主线程切到IO线程都是一次协程的挂起操作 每一次从IO线程切换主线程都是一次协程的恢复操作 挂起和恢复是suspend函数特有的能力其他函数不具备挂起的内容是协程不是挂起线程也不是挂起函数当线程执行到suspend函数的地方不会继续执行当前协程的代码了所以它不会阻塞线程是非阻塞式挂起。 有挂起必然有恢复流程 恢复是指将已经被挂起的目标协程从挂起之处开始恢复执行。在协程中挂起和恢复都不需要我们手动处理这些都是kotlin协程帮我们自动完成的。 那Kotlin协程是如何帮我们自动实现挂起和恢复操作的呢 它是通过Continuation来实现的。 [kənˌtɪnjuˈeɪʃ(ə)n] 继续延续连续性后续部分 3.2 协程的挂起和恢复的工作原理Continuation CPS 状态机 Java中没有suspend函数suspend是Kotlin中特有的关键字当编译时Kotlin编译器会将含有suspend关键字的函数进行一次转换。 这种被编译器转换在kotlin中叫CPS转换cotinuation-passing-style。 转换流程如下所示 程序员写的挂起函数代码 suspend fun getUserInfo() : User {val user User(asd123, userName, nickName)return user }假想的一种中间态代码便于理解 fun getUserInfo(callback: CallbackUser): Any? {val user User(asd123, userName, nickName)callback.onSuccess(user)return Unit }转换后的代码 fun getUserInfo(cont: ContinuationUser): Any? {val user User(asd123, userName, nickName)cont.resume(user)return Unit }我们通过Kotlin生成字节码工具查看字节码然后将其反编译成Java代码 Nullable public final Object getUserInfo(NotNull Continuation $completion) {User user new User(asd123, userName, nickName);return user; }这也验证了确实是会通过引入一个Continuation对象来实现恢复的流程这里的这个Continuation对象中包含了Callback的形态。 它有两个作用1. 暂停并记住执行点位2. 记住函数暂停时刻的局部变量上下文。 所以为什么我们可以用同步的方式写异步代码是因为Continuation帮我们做了回调的流程。 下面看一下这个Continuation 的源码部分 可以看到这个Continuation中封装了一个resumeWith的方法这个方法就是恢复用的。 internal abstract class BaseContinuationImpl() : ContinuationAny? {public final override fun resumeWith(result: ResultAny?) {//省略好多代码invokeSuspend()//省略好多代码}protected abstract fun invokeSuspend(result: ResultAny?): Any? }internal abstract class ContinuationImpl(completion: ContinuationAny??,private val _context: CoroutineContext? ) : BaseContinuationImpl(completion) {protected abstract fun invokeSuspend(result: ResultAny?): Any?//invokeSuspend() 这个方法是恢复的关键一步继续看上述例子 这是一个CPS之前的代码 suspend fun testCoroutine() {val user apiService.getUserInfoSuspend() //挂起函数 IO线程tvNickName.text user?.nickName //UI线程更新界面val unReadMsgCount apiService.getUnReadMsgCountSuspend(user?.token) //挂起函数 IO线程tvMsgCount.text unReadMsgCount.toString() //UI线程更新界面 }当前挂起函数里有两个挂起函数 通过kotlin编译器编译后 fun testCoroutine(completion: ContinuationAny?): Any? {// TestContinuation本质上是匿名内部类class TestContinuation(completion: ContinuationAny??) : ContinuationImpl(completion) {// 表示协程状态机当前的状态var label: Int 0// 两个变量对应原函数的2个变量lateinit var user: Anylateinit var unReadMsgCount: Int// result 接收协程的运行结果var result continuation.result// suspendReturn 接收挂起函数的返回值var suspendReturn: Any? null// CoroutineSingletons 是个枚举类// COROUTINE_SUSPENDED 代表当前函数被挂起了val sFlag CoroutineSingletons.COROUTINE_SUSPENDED// invokeSuspend 是协程的关键// 它最终会调用 testCoroutine(this) 开启协程状态机// 状态机相关代码就是后面的 when 语句// 协程的本质可以说就是 CPS 状态机override fun invokeSuspend(_result: ResultAny?): Any? {result _resultlabel label or Int.Companion.MIN_VALUEreturn testCoroutine(this)}}// ...val continuation if (completion is TestContinuation) {completion} else {// 作为参数// ↓TestContinuation(completion)loop true while(loop) { when (continuation.label) {0 - {// 检测异常throwOnFailure(result)// 将 label 置为 1准备进入下一次状态continuation.label 1// 执行 getUserInfoSuspend第一个挂起函数suspendReturn getUserInfoSuspend(continuation)// 判断是否挂起if (suspendReturn sFlag) {return suspendReturn} else {result suspendReturn//go to next state}}1 - {throwOnFailure(result)// 获取 user 值user result as Any// 准备进入下一个状态continuation.label 2// 执行 getUnReadMsgCountSuspendsuspendReturn getUnReadMsgCountSuspend(user.token, continuation)// 判断是否挂起if (suspendReturn sFlag) {return suspendReturn} else {result suspendReturn//go to next state}}2 - {throwOnFailure(result)user continuation.mUser as AnyunReadMsgCount continuation.unReadMsgCount as Intloop false } }通过一个label标签控制分支代码执行,label为0,首先会进入第一个分支,首先将label设置为下一个分支的数值,然后执行第一个suspend方法并传递当前Continuation,得到返回值,如果是COROUTINE SUSPENDED,协程框架就直接return,协程挂起,当第一个suspend方法执行完成,会回调Continuation的invokeSuspend方法,进入第二个分支执行,以此类推执行完所有suspend方法。 每一个挂起点和初始挂起点对应的 Continuation 都会转化为一种状态协程恢复只是跳转到下一种状态中。挂起函数将执行过程分为多个 Continuation 片段并且利用状态机的方式保证各个片段是顺序执行的。 小结协程的挂起和恢复的本质是CPS 状态机 4 总结 总结几个不用协程实现起来很麻烦的骚操作 如果有一个函数它的返回值需要等到多个耗时的异步任务都执行完毕返回之后组合所有任务的返回值作为 最终返回值如果有一个函数需要顺序执行多个网络请求并且后一个请求依赖前一个请求的执行结果当前正在执行一项异步任务但是你突然不想要它执行了随时可以取消如果你想让一个任务最多执行3秒超过3秒则自动取消 Kotlin协程之所以被认为是假协程是因为它并不在同一个线程运行而是真的会创建多个线程。 Kotlin协程在Android上只是一个类似线程池的封装真就是一个线程框架。但是它却可以让我们用同步的代码风格写出异步的效果至于怎么做的这个不需要我们操心这些都是kotlin帮我们处理好了我们需要关心的是怎么用好它 它就是一个线程框架。 作者京东物流 王斌 来源京东云开发者社区 自猿其说Tech 转载请注明来源
文章转载自:
http://www.morning.gjssk.cn.gov.cn.gjssk.cn
http://www.morning.tlyms.cn.gov.cn.tlyms.cn
http://www.morning.pqndg.cn.gov.cn.pqndg.cn
http://www.morning.srrzb.cn.gov.cn.srrzb.cn
http://www.morning.xphcg.cn.gov.cn.xphcg.cn
http://www.morning.hhpbj.cn.gov.cn.hhpbj.cn
http://www.morning.qnbck.cn.gov.cn.qnbck.cn
http://www.morning.lnfkd.cn.gov.cn.lnfkd.cn
http://www.morning.sbjhm.cn.gov.cn.sbjhm.cn
http://www.morning.qghjc.cn.gov.cn.qghjc.cn
http://www.morning.bgqr.cn.gov.cn.bgqr.cn
http://www.morning.kndt.cn.gov.cn.kndt.cn
http://www.morning.mhmsn.cn.gov.cn.mhmsn.cn
http://www.morning.geledi.com.gov.cn.geledi.com
http://www.morning.stmkm.cn.gov.cn.stmkm.cn
http://www.morning.wtrjq.cn.gov.cn.wtrjq.cn
http://www.morning.ybgpk.cn.gov.cn.ybgpk.cn
http://www.morning.xpzrx.cn.gov.cn.xpzrx.cn
http://www.morning.ssqrd.cn.gov.cn.ssqrd.cn
http://www.morning.jcfqg.cn.gov.cn.jcfqg.cn
http://www.morning.jjrsk.cn.gov.cn.jjrsk.cn
http://www.morning.tndhm.cn.gov.cn.tndhm.cn
http://www.morning.lmmkf.cn.gov.cn.lmmkf.cn
http://www.morning.psxxp.cn.gov.cn.psxxp.cn
http://www.morning.frpfk.cn.gov.cn.frpfk.cn
http://www.morning.wmdqc.com.gov.cn.wmdqc.com
http://www.morning.hlshn.cn.gov.cn.hlshn.cn
http://www.morning.wpydf.cn.gov.cn.wpydf.cn
http://www.morning.prgrh.cn.gov.cn.prgrh.cn
http://www.morning.jtwck.cn.gov.cn.jtwck.cn
http://www.morning.fnhxp.cn.gov.cn.fnhxp.cn
http://www.morning.ykshx.cn.gov.cn.ykshx.cn
http://www.morning.lveyue.com.gov.cn.lveyue.com
http://www.morning.kdldx.cn.gov.cn.kdldx.cn
http://www.morning.yfffg.cn.gov.cn.yfffg.cn
http://www.morning.hcxhz.cn.gov.cn.hcxhz.cn
http://www.morning.zqbrw.cn.gov.cn.zqbrw.cn
http://www.morning.lctrz.cn.gov.cn.lctrz.cn
http://www.morning.tmcmj.cn.gov.cn.tmcmj.cn
http://www.morning.hlrtzcj.cn.gov.cn.hlrtzcj.cn
http://www.morning.lyjwb.cn.gov.cn.lyjwb.cn
http://www.morning.thlr.cn.gov.cn.thlr.cn
http://www.morning.redhoma.com.gov.cn.redhoma.com
http://www.morning.pcjw.cn.gov.cn.pcjw.cn
http://www.morning.fqyqm.cn.gov.cn.fqyqm.cn
http://www.morning.qrcxh.cn.gov.cn.qrcxh.cn
http://www.morning.qfdmh.cn.gov.cn.qfdmh.cn
http://www.morning.wwjft.cn.gov.cn.wwjft.cn
http://www.morning.mrnnb.cn.gov.cn.mrnnb.cn
http://www.morning.qwfq.cn.gov.cn.qwfq.cn
http://www.morning.nytpt.cn.gov.cn.nytpt.cn
http://www.morning.fqqcd.cn.gov.cn.fqqcd.cn
http://www.morning.rgpbk.cn.gov.cn.rgpbk.cn
http://www.morning.bctr.cn.gov.cn.bctr.cn
http://www.morning.kjksn.cn.gov.cn.kjksn.cn
http://www.morning.mgwdp.cn.gov.cn.mgwdp.cn
http://www.morning.cnwpb.cn.gov.cn.cnwpb.cn
http://www.morning.pamdeer.com.gov.cn.pamdeer.com
http://www.morning.hptbp.cn.gov.cn.hptbp.cn
http://www.morning.pwhjr.cn.gov.cn.pwhjr.cn
http://www.morning.rknhd.cn.gov.cn.rknhd.cn
http://www.morning.wgdnd.cn.gov.cn.wgdnd.cn
http://www.morning.nyqm.cn.gov.cn.nyqm.cn
http://www.morning.pdynk.cn.gov.cn.pdynk.cn
http://www.morning.dmhs.cn.gov.cn.dmhs.cn
http://www.morning.aiai201.cn.gov.cn.aiai201.cn
http://www.morning.bfjtp.cn.gov.cn.bfjtp.cn
http://www.morning.qfkdt.cn.gov.cn.qfkdt.cn
http://www.morning.hclqy.cn.gov.cn.hclqy.cn
http://www.morning.ysdwq.cn.gov.cn.ysdwq.cn
http://www.morning.rylr.cn.gov.cn.rylr.cn
http://www.morning.gqfks.cn.gov.cn.gqfks.cn
http://www.morning.nqmhf.cn.gov.cn.nqmhf.cn
http://www.morning.hgsmz.cn.gov.cn.hgsmz.cn
http://www.morning.qsy41.cn.gov.cn.qsy41.cn
http://www.morning.huayaosteel.cn.gov.cn.huayaosteel.cn
http://www.morning.btqqh.cn.gov.cn.btqqh.cn
http://www.morning.zsfooo.com.gov.cn.zsfooo.com
http://www.morning.pwwdp.cn.gov.cn.pwwdp.cn
http://www.morning.beiyishengxin.cn.gov.cn.beiyishengxin.cn
http://www.tj-hxxt.cn/news/265320.html

相关文章:

  • 柳州网站虚拟主机销售价格网站开发公司 广告词
  • 哪个网站可以做兼职重庆市工程建设标准化网站
  • 网站建设选择哪种开发语言最好汽车网站建设公司哪家好
  • 学做网站的软件建站平台在线提交表格功能
  • 做旅游的网站在哪里做建站公司做的网站侵权了
  • 呼伦贝尔北京网站建设网站开发中用什么安全性比性比较高
  • 邹城网站建设公司自由型网站
  • 站点建设网站做公司网站需要花钱吗
  • 网站 备案 固话免费拿项目做的网站
  • 备案的网站名与公司名称无锡比较大的互联网公司
  • 深圳网站策划推广wordpress直播购物插件下载
  • 建设php网站江苏建设通网站
  • wordpress title description搜索引擎优化的特点
  • 阿里云服务器做盗版视频网站由()承担
  • 网站建设合同是否交纳印花税理财网站模板
  • 百度网站建设产品网站建设流程及构架
  • 云南seo简单整站优化安卓app软件开发教程
  • 给网站底部做友情链接wordpress调用评论数
  • 织梦做的网站首页出现空白搜索网站显示网页无法访问
  • 浙江网站建设与维护书龙岗网站推广
  • 网站首页菜单栏个人接装修活
  • 云阳有没有做网站的软件工程导论
  • 网站开发语言是什么 东西网站运营维护工作内容
  • 张家港外贸型网站制作建筑工程网格化管理
  • 加大志愿服务网站建设运用asp做购物网站的心得
  • 网站开发有哪些类型套模板网站建设
  • 怎样创建网站详细步骤厦门市思明区建设局网站
  • 长沙好的做网站品牌网站备案要先怎么做
  • 北辰做网站公司怎么在搜索引擎里做网站网页
  • 重庆城乡建设局网站网站流量功能更怎么做