我有一个单线程python3程序,我试图转换为使用许多线程.我有一个类似于树的数据结构,可以读取和写入.可能有许多线程需要同时读写.
一个显而易见的方法是对整个数据结构使用单个锁:在写入发生时没有人可以读取,一次只能发生一次写入,并且在有待处理的读取时不会发生写入.
但是,我想让锁定更精细,以获得更好的性能.它是一棵完整的16棵树,当人口密集时,它有大约5到6百万片叶子(实际上大多数都是平衡的,但不能保证).如果我想要最细粒度的锁定,我可以锁定叶子的父母.这意味着超过10万把锁.
我必须承认,我还没有尝试过.但我想我先问:是否存在任何硬件限制或性能原因导致我无法创建如此多的锁定对象?也就是说,我是否应该考虑从根(例如256锁)锁定到深度2?
感谢您的任何见解.
编辑:
更多细节:
我还不知道有多少核心,因为我们仍在试验我们需要多少计算能力,但我猜测只会使用少数几个核心.
我的目标是大约50,000个线程.有异步I/O,每个插槽一个线程.在代码的引导阶段,尽可能多的线程将同时运行(受硬件限制),但这是一次性成本.我们更感兴趣的是一旦事情开始运行.那时,我猜测每秒只有几千个正在运行.我需要测量响应时间,但我猜它每个唤醒周期大约10ms.这是一次活动的几十个线程(平均而言).
现在我写出来了,也许这就是我的问题的答案.如果我一次只需要几十个线程读取或写入,那么我真的不需要在树上进行细粒度锁定.