就是那个问题!
何时需要多线程应用程序,以及在多线程中一般要考虑什么?
如果一个例子与解释一起发布,将不胜感激.
谢谢.
PS.我在发布之前尝试检查所有可能的问题,如果这个问题只是另一个问题,请关闭它.
Con*_*rix 14
在约瑟夫·阿尔巴海(Joseph Albahai)的C#线程中有一个很好的部分,题为"线程的使用和误用".它列出了线程的五个常见用例.
维护响应式用户界面
通过在并行"工作"线程上运行耗时的任务,主UI线程可以自由地继续处理键盘和鼠标事件.
有效利用原本阻塞的CPU
当线程正在等待来自另一台计算机或硬件的响应时,多线程非常有用.虽然在执行任务时阻塞了一个线程,但其他线程可以利用其他无负载的计算机.
并行编程
如果工作负载在"分而治之"策略中的多个线程之间共享,则执行密集计算的代码可以在多核或多处理器计算机上更快地执行
投机执行
在多核计算机上,您有时可以通过预测可能需要完成的事情来提高性能,然后提前完成.LINQPad使用此技术来加速新查询的创建.一种变化是并行运行许多不同的算法,这些算法都解决了相同的任务.无论哪一个首先完成"胜利" - 当你无法提前知道哪种算法执行得最快时,这是有效的.
允许同时处理请求
在服务器上,客户端请求可以同时到达,因此需要并行处理(如果使用ASP.NET,WCF,Web服务或远程处理,.NET Framework会自动为此创建线程).这在客户端上也是有用的(例如,处理对等网络 - 或甚至来自用户的多个请求).
他继续提醒读者
使用ASP.NET和WCF等技术,您可能不会意识到多线程甚至正在发生 - 除非您在没有适当锁定的情况下访问共享数据(可能通过静态字段),否则会遇到线程安全问题.
线程也附带有字符串.最大的问题是多线程可能会增加复杂性.拥有大量线程并不会产生很多复杂性; 这是线程之间的交互(通常通过共享数据).这适用于相互作用是否是有意的,并且可能导致长的开发周期以及对间歇性和不可再现的错误的持续敏感性.出于这个原因,将交互保持在最低限度,并尽可能坚持简单且经过验证的设计是值得的.本文主要侧重于处理这些复杂性; 删除交互,并没有多少说!
一个好的策略是将多线程逻辑封装到可以独立检查和测试的可重用类中.框架本身提供了许多更高级别的线程构造,我们将在后面介绍.
线程在调度和切换线程时也会产生资源和CPU成本(当存在比CPU内核更多的活动线程时) - 并且还存在创建/拆除成本.多线程并不总能加速你的应用程序 - 如果使用过度或不适当,甚至可以减慢它的速度.例如,当涉及大量磁盘I/O时,让一些工作线程按顺序运行任务比一次执行10个线程更快.(在使用Wait和Pulse的信号中,我们描述了如何实现生产者/消费者队列,它提供了这个功能.)
| 归档时间: |
|
| 查看次数: |
8772 次 |
| 最近记录: |