我正在使用gatling来运行负载测试。我不是gatling或scala专家,但在我看来,这个特定的问题可能更多地与scala(和Akka)相关,而不是与gatling本身相关。我将从最后开始:当在不太强大的机器上高负载运行时,我偶尔会得到这样的错误:
Iterator.continually([some collection]).flatten
其中[some collection]是我试图循环遍历的集合。当许多并发线程试图访问以这种方式定义的迭代器时,它是否偶尔会失败?有没有更好的方法创建一个循环迭代器,也是线程安全的?
正如下面的“save”方法创建的租户对象(实际上,这里有更多的代码填充由get方法检索的集合,因此它实际上从不为空):
import io.gatling.core.Predef._
object Tenants {
type TenantKeys = Map[String, Map[String, String]]
val key = "tenants"
val elementKey = "tenant"
var tenants: Iterator[Map[String, String]] = Iterator(Map[String, String]())
def get(session: Session): TenantKeys = {
session(key)
.asOption[TenantKeys]
.getOrElse(Map[String, Map[String, String]]())
}
def save(session: Session): Session = {
val mapped = get(session).map(_._2).toSeq
tenants = Iterator.continually(mapped).flatten
session
}
}
你所做的不能简单地起作用。这不是Scala的问题,而是并发编程的问题。就像Java迭代器一样,Scala迭代器不是线程安全的。
使用Gatling的feed()
,这是线程安全的。
null 一些示例输出数据: *编辑:工作的scala代码行:
迭代器不是集合,而是逐个访问集合元素的方法。 iterator it上的两个基本操作是next和hasNext 。 对it.next()调用将返回迭代器的下一个元素并提升迭代器的状态。 您可以使用Iterator的it.hasNext方法找出是否有更多元素要返回。 “逐步”迭代器返回的所有元素的最简单方法是使用while循环。 让我们按照以下示例程序进行操作。 例子 (Example) objec
问题内容: 我从下面的代码中获得,我可以找到原因。我可以成功地从csv文件读取数据,并创建一个名为课程列表的arraylist。那么我需要将其排序到一个数组列表,该数组的每个单元格都包含相同课程(名称相似的课程)的数组列表。但是当我运行它时会生成ConcurrentModificationException,我不明白为什么… 这是我的CourefileSorterclass: 问题答案: 将它们分
主要内容:实例,查找最大与最小元素,实例,获取迭代器的长度,实例,Scala Iterator 常用方法Scala 集合 Scala Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法。 迭代器 it 的两个基本操作是 next 和 hasNext。 调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。 调用 it.hasNext() 用于检测集合中是否还有元素。 让迭代器 it 逐个返回所有元素最简单的方法是使用 while 循环: 实例 object T
Scala 集合 Scala Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法。 迭代器 it 的两个基本操作是 next 和 hasNext。 调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。 调用 it.hasNext() 用于检测集合中是否还有元素。 让迭代器 it 逐个返回所有元素最简单的方法是使用 while 循环: object Test
我有一个顺序数据源,表示为简单迭代器(或流)。数据相当大,不适合内存。此外,源代码可以遍历一次,并且获取成本很高。该源用于一些重过程(黑盒),该过程将迭代器(或流)作为其参数来使用线性数据。好的,很简单。但如果我有两种不同的消费程序,我该怎么办??正如我所说的,我不想将输入数据吸入类似列表的集合中。我也可以从一开始就重读源代码两次来完成我的任务,但我不喜欢这样,因为这样做没有效果。如果事实上我需要