codex-storage/apatheia
Apatheia
Apatheia (Greek: ἀπάθεια; from a- "without" and pathos "suffering" or "passion"), in Stoicism, refers to a state of mind in which one is not disturbed by the passions. It might better be translated by the word equanimity than the word indifference.
The goal of the apatheia library is to provide a painless, suffering free way of using multi-threading with async in Nim.
The main modules are:
- queues - queues with support for async signals
- jobs - macro and utilities for submitting jobs to a taskpool
- tasks - convenience wrapper to turn a proc into a job with a simple API
Example usage:
import taskpools
import apatheia/tasks
proc addNums(a, b: float): float {.asyncTask.} =
os.sleep(50)
return a + b
proc addNumValues(vals: openArray[float]): float {.asyncTask.} =
os.sleep(100)
result = 0.0
for x in vals:
result += x
suite "async tests":
var tp = Taskpool.new(num_threads = 2) # Default to the number of hardware threads.
asyncTest "test addNums":
var jobs = newJobQueue[float](taskpool = tp)
let res = await jobs.submit(addNums(1.0, 2.0,))
check res == 3.0
asyncTest "test addNumValues":
var jobs = newJobQueue[float](taskpool = tp)
let args = @[1.0, 2.0, 3.0]
let res = await jobs.submit(addNumValues(args))
check res == 6.0
Future Goals:
- support orc and refc
- refc may require extra copying for data
- use event queues (e.g. channels) to/from thread pool
- make it easy to monitor and debug queue capacity
- only use minimal AsyncFD handles
- lessen pressure on the main chronos futures pending queue
- support backpressure at futures level
- benchmarking overhead
- special support for seq[byte]'s and strings with zero-copy
- implement special but limited support zero-copy arguments on refc
最近版本更新:(数据更新于 1970-01-01 00:00:00)
codex-storage/apatheia同语言 Nim最近更新仓库
2023-07-31 10:24:23 ringabout/httpx
1970-01-01 00:00:00 JasonFruit/mdserver
1970-01-01 00:00:00 zer0-star/matsuri
1970-01-01 00:00:00 squattingmonk/nasher
1970-01-01 00:00:00 zedeus/nitter
1970-01-01 00:00:00 abisxir/alasgar