napi-rs/bench/async.bench.ts
2025-05-16 22:27:23 +08:00

42 lines
978 B
TypeScript

import { cpus } from 'node:os'
import { createRequire } from 'node:module'
import { bench } from 'vitest'
const require = createRequire(import.meta.url)
const {
benchAsyncTask,
benchThreadsafeFunction,
benchTokioFuture,
} = require('./index.node')
const buffer = Buffer.from('hello 🚀 rust!')
const ALL_THREADS = Array.from({ length: cpus().length })
bench('spawn task', async () => {
await Promise.all(ALL_THREADS.map(() => benchAsyncTask(buffer)))
})
bench('ThreadSafeFunction', async () => {
await Promise.all(
ALL_THREADS.map(
() =>
new Promise<number | undefined>((resolve, reject) => {
benchThreadsafeFunction(buffer, (err?: Error, value?: number) => {
if (err) {
reject(err)
} else {
resolve(value)
}
})
}),
),
)
})
bench('Tokio future to Promise', async () => {
await Promise.all(ALL_THREADS.map(() => benchTokioFuture(buffer)))
})