|
|
1
12
在应用程序中使用多线程有各种原因:
应该选择的方法取决于你想做什么。对于UI响应性,考虑使用
对于并发操作(例如服务器:没有 有 要并行,但即使在单核系统上也可能需要并发),可以考虑使用线程池,或者,如果任务寿命长并且需要很多任务,可以考虑每个任务使用一个线程。 如果你有一个所谓的令人尴尬的并行问题,可以很容易地划分为小的子问题,可以考虑使用一个从队列中提取任务的工作线程池(与CPU内核一样多的线程)。微软 Task Parallel Library (TPL) 可能在这里有所帮助。如果作业可以很容易地表示为一元流计算(即使用LINQ中的查询进行转换和聚合等工作),那么在TPL之上运行的并行LINQ(相同链接)可能会有所帮助。 还有其他方法,例如 Actor-style parallelism 如Erlang所示,在Erlang中更难有效地实现。NET,因为缺乏绿色线程模型或实现绿色线程模型的方法,如CLR支持的延续。 |
|
|
2
3
|
|
|
3
2
看看 Power Threading 图书馆。 |
|
4
2
在我的日子里,我写了很多线程代码,甚至实现了我自己的线程池;调度员。这里记录了很多: http://web.archive.org/web/20120708232527/http://devplanet.com/blogs/brianr/default.aspx 只要意识到我写这些是为了非常具体的目的,并在这些条件下进行了测试,就没有真正的灵丹妙药。 |
|
|
5
1
我的建议是,在迁移到任何其他库之前,先熟悉线程池。很多框架代码都使用线程池,所以即使你碰巧找到了最佳线程库(TM),你仍然必须使用线程库,所以你真的需要了解这一点。 您还应该记住,在实现线程池和对其进行调优方面已经做了很多工作。NET的并行库的发展带来了许多改进。 在我看来,通过了解当前线程池的优缺点,可以修正其许多“问题”。 |
|
|
6
1
请记住,当你不再需要线程时,你真的应该关闭线程(或允许线程池处理),除非你很快会再次需要它们。我这么说的原因是,每个线程都需要堆栈内存(通常为1mb),所以当你的应用程序位于线程上但不使用它们时,你就是在浪费内存。 例如,我机器上的Outlook现在有20个线程打开,CPU使用率为0%。这简直是浪费(至少)20mb的内存。Word还使用了另外10个线程,CPU为0%。30mb可能看起来不多,但如果每个应用程序都浪费了10-20个线程呢? 同样,如果你需要定期访问线程池,那么你不需要关闭它(创建/销毁线程会产生开销)。 |
|
|
7
1
您不必显式使用线程池,如果需要异步调用,可以使用BeginInvoke EndInvoke。它在幕后使用线程池。请看这里: http://msdn.microsoft.com/en-us/library/2e08f6yc.aspx |
|
|
8
1
你应该看看 Concurrency & Coordination Runtime 。CCR一开始可能有点令人望而生畏,因为它需要一种略有不同的心态。这 video 对它的工作原理有很好的解释。.. 在我看来,这将是正确的做法,我还听说它将使用与 TPL . |
|
|
9
0
对我来说,框架的内置类已经足够了。这个
我经常使用
我经常手动启动线程,并使用
|
|
|
10
0
您可能想看看关于线程模式的系列文章。现在,它有实现WorkerThread和ThreadedQueue的示例代码。 http://devpinoy.org/blogs/jakelite/archive/tags/Threading+Patterns/default.aspx |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |