gpt4 book ai didi

c# - 多线程还是不多线程?

转载 作者:太空狗 更新时间:2023-10-29 23:46:52 25 4
gpt4 key购买 nike

假设一个 FIFO(一个线程安全的)有项目被添加到它(我们不关心如何)

|__|  |
| | |
|__| |
| | |
|__| V
| d|
|__|
| c|
|__|
| b|
|__|
| a|

现在假设项目(一个接一个)应该被插入到另一个并发集合中。

数据插入的速率是动态的

我想以最快的方式完成。 (将所有元素从 Fifo 转移到 collection)。

但是我遇到了冲突:

  • 我可以使用 一个 线程从 Fifo 中提取项目并将它们插入到 collection 中。但是我不会使用可以帮助我的内核/其他线程。

  • 我可以使用多个消费者线程从 Fifo 中获取项目,但可能是 Fifo 上的内部锁定(读取时),以及内部锁定在集合上(写入时)最终会降低性能。

我的意思是,会出现这样一种情况,如果我有大量的消费者线程,也会有大量的 fifo/collection 内部锁定,加上许多上下文切换

我如何以正确的方式解决此类问题?准则是什么?

最佳答案

多个线程争用同一个并发集合永远是瓶颈情况。线程越多,问题通常越严重,但恶化的速度取决于锁定机制。我希望 .NET 4.0 中新的并发集合是无锁的,或者至少使用非阻塞锁,因此它们在一定程度上应该是竞争友好的。

由于这个问题似乎是开放式的,我建议您简单地尝试各种线程数,并在 fifo 争用和您想要实现的吞吐量之间找到平衡点。

关于c# - 多线程还是不多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14230150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com