multithreading - 线程还是异步?

标签 multithreading language-agnostic

你如何使你的应用程序成为多线程的?
你使用异步函数吗?
或者你产生一个新的线程?
我认为异步函数已经产生了一个线程,所以如果你的工作只是做一些文件读取,那么懒惰并且只是在线程上产生你的工作只会“浪费”资源......
那么在使用线程或异步函数时是否有某种设计?

最佳答案

如果您开始生成大量线程,生成线程只会浪费资源,一两个额外的线程不会影响平台性能,事实上 System 目前对我来说有超过 70 个线程,而 msn 正在使用 32 个(我真的有不知道信使如何使用那么多线程,特别是当它最小化并且没有真正做任何事情时......)

通常,生成线程的好时机是某件事需要很长时间,但您需要继续做其他事情。

例如说一个计算将需要 30 秒。最好的办法是为计算生成一个新线程,以便您可以继续更新屏幕,并处理任何用户输入,因为如果您的应用程序在完成计算之前卡住,用户会讨厌它。

另一方面,创建线程来完成几乎可以立即完成的事情几乎毫无意义,因为创建(甚至只是使用线程池将工作传递给现有线程)的开销将高于仅在第一名。

有时您可以将您的应用程序分成几个独立的部分,这些部分在各自的线程中运行。例如,在游戏中,更新/物理等可能是一个线程,而图形是另一个线程,声音/音乐是第三个线程,而网络是另一个线程。这里的问题是您真的必须考虑这些部分将如何交互,否则您的性能可能会更差,错误似乎是“随机”发生的,甚至可能会死锁。

关于multithreading - 线程还是异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61342/

相关文章:

ios - Objective-C 类别中的线程安全

Java计划任务在后台以一定间隔重复运行

algorithm - 什么是日历队列?

language-agnostic - 什么是类接口(interface)?

java - 登录多线程应用程序

Java的synchronized方法并不是同步的

objective-c - 撤消如何工作?

language-agnostic - 单词混杂算法

java - 如何获得数组中某个重复出现的数字的一组频率?

c - 线程终止问题(C 编程)