@@ -3,10 +3,14 @@ package tech.ydb.testdb
33import jakarta.persistence.EntityManager
44import org.slf4j.LoggerFactory
55import org.springframework.beans.factory.annotation.Autowired
6+ import org.springframework.beans.factory.annotation.Value
67import org.springframework.boot.CommandLineRunner
78import org.springframework.boot.autoconfigure.SpringBootApplication
89import org.springframework.boot.runApplication
910import java.time.Instant
11+ import java.util.concurrent.ExecutorService
12+ import java.util.concurrent.Executors
13+ import kotlin.concurrent.thread
1014
1115/* *
1216 * @author Kirill Kurdyukov
@@ -20,21 +24,28 @@ class TestDbApplication : CommandLineRunner {
2024 @Autowired
2125 lateinit var entityManager: EntityManager
2226
27+ @Value(" \$ {workers.count}" )
28+ var workersCount: Int = 0
29+
2330 override fun run (vararg args : String? ) {
2431 val testString = String (ByteArray (1024 ) { ' a' .code.toByte() })
2532
26- var sink = 0
27- val t0 = System .nanoTime()
28- val end = t0 + 10_000_000_000L
29- var count = 0
30- while (System .nanoTime() < end) {
31- sink + = getFixedString(testString).length
32- count++
33+ repeat(workersCount) {
34+ thread {
35+ var sink = 0
36+ val t0 = System .nanoTime()
37+ val end = t0 + 10_000_000_000L
38+ var count = 0
39+ while (System .nanoTime() < end) {
40+ sink + = getFixedString(testString).length
41+ count++
42+ }
43+ val elapsed = System .nanoTime() - t0
44+ val avgMs = elapsed.toDouble() / count / 1_000_000.0
45+ val opsPerSec = count * 1e9 / elapsed
46+ log.info(" WorkerNum {}, avg={} ms/op, throughput={} ops/s" , it, avgMs, opsPerSec)
47+ }
3348 }
34- val elapsed = System .nanoTime() - t0
35- val avgMs = elapsed.toDouble() / count / 1_000_000.0
36- val opsPerSec = count * 1e9 / elapsed
37- log.info(" avg={} ms/op, throughput={} ops/s" , avgMs, opsPerSec)
3849 }
3950
4051 fun getFixedString (s : String ): String {
0 commit comments