У меня странное наблюдение о раковинах скаляз-потоков. Они работают медленно. Кто-нибудь знает, почему? И есть ли способ улучшить производительность?Как повысить производительность кода с помощью раковины?
здесь соответствующие части моего кода: версия без раковины
//p is parameter with type p: Process[Task, Pixel]
def printToImage(img: BufferedImage)(pixel: Pixel): Unit = {
img.setRGB(pixel.x, pixel.y, 1, 1, Array(pixel.rgb), 0, 0)
}
val image = getBlankImage(2000, 4000)
val result = p.runLog.run
result.foreach(printToImage(image))
это занимает ~ 7s выполнить
версия с раковиной
//p is the same as before
def printToImage(img: BufferedImage)(pixel: Pixel): Unit = {
img.setRGB(pixel.x, pixel.y, 1, 1, Array(pixel.rgb), 0, 0)
}
//I've found that way of doing sink in some tutorial
def getImageSink(img: BufferedImage): Sink[Task, Pixel] = {
//I've tried here Task.delay and Task.now with the same results
def printToImageTask(img: BufferedImage)(pixel: Pixel): Task[Unit] = Task.delay {
printToImage(img)(pixel)
}
Process.constant(printToImageTask(img))
}
val image = getBlankImage(2000, 4000)
val result = p.to(getImageSink(image)).run.run
это один занимает 33 секунд, чтобы выполнить , Из-за этой существенной разницы я совершенно смущен.
Спасибо, что объясняет это странное поведение. Я думал, что это довольно легкий процесс. – user2963977