首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有多少个协同线是太多了?

有多少个协同线是太多了?
EN

Stack Overflow用户
提问于 2019-03-19 09:14:54
回答 3查看 2.4K关注 0票数 4

我需要加快搜索一些收集数以百万计的元素。搜索谓词需要作为参数传递。

我一直在想,最简单的解决方案(至少目前是这样)是不是仅仅是使用协同机制来完成这项任务。

我现在面临的问题是,我可以一次创建多少个协同线。D附带说明,可能有不止一个这样的搜索同时运行。

我能为每一个这样的搜索建立数百万个协同(每个项目一条)吗?我是否应该决定每个协同线的一些工作负载(例如,每个协同线1000项)?我是否也应该决定一个上限的合作数量?

我对协同器及其实际工作方式有大致的了解,但是,我不知道这个特性的性能限制是什么。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-19 10:22:59

从coroutine生成器块到悬挂点的调用跟踪深度的协同线刻度的内存权重。每个suspend fun调用都会将另一个Continuation对象添加到链接列表中,这将在coroutine挂起时保留。一个Continuation实例的粗略数字是100个字节。

因此,如果您的调用跟踪深度为5,那么每个项的调用跟踪深度为500个字节。一百万件是500 MB。

但是,除非您的搜索代码涉及阻塞会使线程空闲的操作,否则您将无法从协同器中获得任何信息。您的任务看起来更像是数据paralellism的实例,您可以使用java.util.stream API非常有效地解决它(如用户马斯特兰在注释中所指出的)。

票数 6
EN

Stack Overflow用户

发布于 2019-03-19 09:26:51

根据kotlin coroutine起动机指南,该示例启动100 K协同工作。我相信你想做的正是kotlin协同设计的目的。

票数 0
EN

Stack Overflow用户

发布于 2019-03-19 15:30:07

如果您不会对您的集合进行许多修改,那么只需将其存储在HashMap中,则将其存储在TreeMap中。那就在那里搜索物品。我相信在那里实现的搜索方法经过了足够的优化,可以在眨眼之间处理一百万项。在这种情况下我不会使用协同线。

文件(为Kotlin):

HashMap:https://developer.android.com/reference/kotlin/java/util/HashMap

TreeMap:https://developer.android.com/reference/kotlin/java/util/TreeMap

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

https://stackoverflow.com/questions/55237267

复制
相关文章

相似问题

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