就我而言,理想的线程数量是3:一个用于UI,一个用于CPU资源,一个用于IO资源.
但我可能错了.
我刚刚介绍给他们,但我总是使用一个用于UI,一个用于其他一切.
我什么时候应该使用线程?我怎么知道我是否应该使用它们?
Cra*_*nec 15
不幸的是,使用Threads并没有严格的规则.如果您有太多线程,处理器将花费所有时间在它们之间生成和切换.使用太少的线程,您将无法获得应用程序中所需的吞吐量.另外使用线程并不容易.像C#这样的语言让你更容易,因为你有像这样的工具ThreadPool.QueueUserWorkItem.这允许系统管理线程创建和销毁.这有助于减少创建新线程以将工作传递到其上的开销.你必须记住,创建一个线程不是你"免费"获得的操作.启动线程会产生相关成本,因此应始终考虑这些成本.
根据您用于编写应用程序的语言,您将决定使用线程需要多少担心.
我经常发现我需要考虑明确创建线程的时间是:
答案完全取决于您的计划.但是,一个CPU资源是一个不好的举措 - 你的CPU在零售CPU中可能有多达六个内核和超线程,而大多数CPU将有两个或更多.在这种情况下,您应该拥有与CPU核心一样多的线程,以及一些用于调度事故的线程.整个CPU不是单线程的野兽,它可能有很多核心,需要很多线程才能100%利用.
当且仅当您的目标人口统计数据几乎都具有多核(如当前台式机/笔记本电脑市场的情况)时,您应该使用线程,并且您已确定一个核心的性能不够.
从SQLite FAQ:" 线程是邪恶的.避免使用它们." 只有在你必须的时候才使用它们.
如果必须,请采取措施避免通常的屠杀.使用线程池执行细粒度的任务,没有相互依赖性,使用GUI框架提供的工具将结果分发回UI.避免在长时间运行的线程之间共享数据; 使用消息队列在它们之间传递信息(并进行同步).
更奇特的解决方案是使用Erlang等语言,这些语言专为细粒度并行而设计,而不会牺牲安全性和可理解性.并发本身对计算的未来至关重要; 线程只是表达它的一种可怕的,破碎的方式.