编程并发
Source: Dev.to
介绍

每个有经验的程序员都知道并发是一把双刃剑。它是优先级、样板代码和各种模型之间的平衡艺术。但我们仍然忍受它,因为我们知道它为何重要。
当你开始在任何语言中测量并发时,最显著的变化是并行性——操作开始同时进行的效果。
例如:想象一个拥有 16 个耗时操作的应用。如果每个操作需要 1 秒才能运行,同步执行会迫使用户等待 16 秒。在一颗 16 核 CPU 上,完美的并发模型可以在仅 1 秒内完成所有操作。现实中你很少能实现每核 1 对 1 的完美扩展,但良好的并发可以让你接近这种效果。
收益显而易见,代价是复杂性。突然之间,你的逻辑被锁定在一个严格的时序系统中。你不再只是编写函数,而是要管理竞争。你必须手动确保线程不会争夺资源或破坏状态。I/O 操作需要完全不同的锁策略。
一旦你意识到安全线程的要求,它就会侵蚀你原本想用来实际构建功能的时间。并发逻辑直接侵入你的业务逻辑,干扰干净的函数,充斥着锁和信号量,直到你开始怀疑:“我为什么要使用线程?”
介绍 Py‑TokenGate
我想要线程的性能收益,却不想承担手动资源保护的思维负担,也不想仅仅为了并行而重写同步逻辑。
TokenGate 是一种基于令牌管理的并发实验。你不需要在函数内部手动管理锁,只需给函数加上装饰器。
@task_token_guard(operation_type='prime_check', tags={'weight': 'medium'})
def prime_operation(n):
"""Check if the number is prime (moderate complexity)."""
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True通过使用 @task_token_guard,你定义任务的权重,让 OperationsCoordinator 负责流量控制。它将任务划分到不同的通道,并通过令牌将它们引导到工作者的邮箱中。
它并不是解决所有竞争条件的灵丹妙药,但它有效地消除了标准并发工作流中的样板代码。
在此处查看:
TokenGate
它是什么
一个小型实验系统,用于通过令牌管理的并发模型路由被装饰的同步函数。它旨在作为独立的并发工作流运行,而不是与常规线程模式并存。
它不是
它并非作为生产代码呈现。
概览
TokenGate 探索了令牌管理的并发概念:一种以结构化方式协调 async 编排与基于线程的工作的方法。此仓库是概念验证,而非完整产品。它仍在实验阶段,持续演进,并以探索精神共享。
如果你想了解更完整的概览,请从这里开始:
如果这里的任何内容对你有用、有趣或激发了灵感,那已经足以让这个项目值得存在。
如何使用(两种版本,两种装饰器)
注意:不要尝试装饰 async 函数。
令牌装饰器使用 asyncio,但被装饰的函数本身应当是同步的…