Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 有多少次合作太多了?_Kotlin_Kotlin Coroutines - Fatal编程技术网

Kotlin 有多少次合作太多了?

Kotlin 有多少次合作太多了?,kotlin,kotlin-coroutines,Kotlin,Kotlin Coroutines,我需要加快对一些包含数百万元素的集合的搜索。 搜索谓词需要作为参数传递 我一直在想,最简单的解决方案(至少现在)是否不仅仅是在任务中使用协同程序 我现在面临的问题是,一次可以创建多少个协同程序:D作为旁注,可能有多个这样的搜索同时运行 我可以为每一次这样的搜索进行数百万次的协作吗?我是否应该决定每个协同程序的工作量(例如,每个协同程序有1000个项目)?我是否也应该决定一些共同项目金额的上限 我对协同程序及其实际工作方式有大致的了解,但是,我不知道这个特性的性能限制是什么 谢谢 根据,该示例启动

我需要加快对一些包含数百万元素的集合的搜索。 搜索谓词需要作为参数传递

我一直在想,最简单的解决方案(至少现在)是否不仅仅是在任务中使用协同程序

我现在面临的问题是,一次可以创建多少个协同程序:D作为旁注,可能有多个这样的搜索同时运行

我可以为每一次这样的搜索进行数百万次的协作吗?我是否应该决定每个协同程序的工作量(例如,每个协同程序有1000个项目)?我是否也应该决定一些共同项目金额的上限

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


谢谢

根据,该示例启动了100K个协同程序。我相信您打算做的正是kotlin协同程序的设计目的。

协同程序的内存重量随着从协同程序生成器块到挂起点的调用跟踪深度而变化。每次
suspend fun
调用都会将另一个
Continuation
对象添加到一个链接列表中,并在挂起协同程序时保留该对象。一个
Continuation
实例的粗略数字是100字节

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


然而,除非您的搜索代码包含阻塞操作,从而使线程处于空闲状态,否则您不会从协程中获得任何好处。您的任务看起来更像是一个数据并行实例,您可以使用
java.util.stream
API(如用户在评论中所述)非常高效地解决它。

如果您不想对集合进行太多修改,只需将其存储在HashMap中, 否则,将其存储在树形图中。然后在那里搜索项目。我相信在那里实现的搜索方法已经足够优化,可以在一瞬间处理一百万个项目。在这种情况下,我不会使用协程

文件(适用于Kotlin):

哈希映射:


TreeMap:

如果您在JVM上,您可以使用并行流。类似于
list.parallelStream().filter(predicate).collect(Collectors.toList())
。如果要进行大量搜索,对集合进行排序(和/或添加一个或多个索引)以避免每次都必须扫描整个集合,不是会更有效吗?谢谢,这没有直接回答我的问题,但提供了我需要的实际信息。