MyGit

codex-storage/apatheia

Fork: 0 Star: 2 (更新于 2024-12-17 06:04:11)

license: 暂无

Language: Nim .

GitHub网址

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