|
|
1
17
你可以试试 Parallel extensions (.NET 4.0的一部分) 这些允许您编写类似以下内容:
当然result.add需要是线程安全的。 |
|
|
2
18
并行扩展很酷,但这也可以通过使用这样的线程池来实现:
|
|
|
3
12
请注意,并发并不能神奇地为您提供更多资源。您需要确定是什么减缓了CalculateSth的速度。 例如,如果它是CPU受限的(并且你在一个内核上),那么无论你是顺序执行还是并行执行,代码都会收到相同数量的CPU滴答声。此外,管理线程会带来一些开销。同样的论点也适用于其他约束(例如I/O) 只有当CalculateSmth在执行过程中释放出可供其他实例使用的可用资源时,您才能获得性能提升。这并不罕见。例如,如果任务涉及IO和一些CPU工作,那么进程1可能正在做CPU工作,而进程2正在做IO。正如mats指出的那样,如果你有基础设施,一系列生产者-消费者单元可以实现这一点。 |
|
|
4
5
你需要把你想同时做的工作分开。以下是一个如何将工作一分为二的示例:
|
|
|
5
2
您必须回答的第一个问题是是否应该使用线程 如果你的函数CalculateSmth()基本上是CPU受限的,即CPU使用率很高,基本上没有i/O使用率,那么我很难理解使用线程的意义,因为线程将争夺相同的资源,在这种情况下是CPU。 如果你的Calculatemth()同时使用CPU和I/O,那么它可能是使用线程的一个点。 我完全同意对我的回答的评论。我错误地假设我们谈论的是单核CPU,但现在我们有多核CPU,这是我的错。 |
|
|
6
1
我现在并没有什么好文章,但你想做的是将生产者-消费者与线程池结合起来。 生产者循环并创建任务(在这种情况下,可能只是在列表或堆栈中排队)。例如,消费者是五个线程,从堆栈中读取一个项目,通过计算来消费它,然后将其存储在其他位置。 这样,多线程仅限于这五个线程,它们都有工作要做,直到堆栈为空。 需要考虑的事情:
|
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |