首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >谁负责中止和继续合作机制?

谁负责中止和继续合作机制?
EN

Stack Overflow用户
提问于 2019-05-24 08:55:16
回答 1查看 652关注 0票数 9

在异步编程方面,这可能是一个非常基本的问题,但我试着阅读它,却找不到相应的资源。

假设:--关于异步编程的一般想法:

当我们启动阻塞操作(网络调用,从DB/file中读取)时,我们可以将其委托给内核线程,这将使我们的应用程序线程对其他作业保持免费。内核线程等待作业完成,并在任务完成时对应用程序线程进行回调。

Coroutines :,我最近几天一直在读关于Kotlin的文章。我认为,概念明智的协同是语言不可知论。我一直在问的问题是:

suspensioncontinuation是如何为共同例程而发生的。Coroutines不是线程(OS给出处理器的一部分),它们是tasks,它将被调度在要执行的线程上。

世卫组织一直在寻找执行中的程序,并说,这个协同线已经到达一个暂停点,它应该从线程中取出。另一个需要从continuation恢复的协同线应该安排在线程上。至于我所读到的关于Java Fibers的文章,它将由一个Fiber Scheduler来完成,这类似于Kotlin吗?

提前感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-24 15:56:19

Coroutine悬架是完全明确和一流的。当您调用suspendCoroutine()suspendCancellableCoroutine(),传入作为参数接收延续的块时,就会发生这种情况。

这个块可以对延续对象做它想做的任何事情,当某个人在某个地方调用continuation.resume(resultValue()时,它就会恢复。它恢复的线程最初是调用resume()的线程,但是resume内部的逻辑立即委托给负责的调度程序,后者通常会将恢复提交给另一个线程或线程池。

调度程序逻辑也是一流的,您可以编写自己的调度程序。但是,这几乎从来不需要,因为只有少数几种有意义的方法可以做到,而Kotlin已经支持它们了。

您还可以查看一个concrete example in code,它演示了suspendCoroutinecoroutine.resume()的裸露用法,而不需要Dispatcher添加到其中的层。

顺便说一句,你从不把阻塞操作委托给“内核线程”,使它们成为非阻塞的。异步操作不会阻塞任何线程。例如,在较低的级别上,有一个选择器的机制,当事件完成时接收来自IO操作的事件。它的工作原理非常类似于GUI线程中的事件循环。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56289112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档