57 user-interface swing multithreading android
例如,Java Swing和Android UI都使用单线程模型,其中单个UI线程负责更新所有UI.是什么让框架设计师选择了一个线程模型而不是另一个?
多线程UI模型不会以更复杂的代价为您提供更多性能吗?我意识到后者是一个大问题,因为线程相关的错误很讨厌,但我想知道除了简单性之外单线程模型是否还有其他优点?
Mic*_*rdt 39
是什么让框架设计师选择了一个线程模型而不是另一个?
从马的嘴里:
AWT最初是作为普通的多线程Java库公开的.但是当Java团队研究AWT的经验以及人们遇到的僵局和种族时,我们开始意识到我们正在做出一个我们无法保留的承诺.
这个分析在1997年Swing的一次设计评审中达到高潮,当时我们回顾了AWT中的游戏状态以及整体行业经验,我们接受了Swing团队的建议,即Swing应该只支持非常有限的多线程.
(阅读整篇文章,它非常详细地解释了这个决定,并指出完全相同的问题,最终转向单线程模型甚至在施乐帕洛阿尔托研究中心早些时候发生过 - 我们认为在CS中几乎所有我们现代化的东西都是现代的. 30年前发明的)
多线程UI模型不会以更复杂的代价为您提供更多性能吗?
绝对不是,因为绘制GUI和处理用户操作(这是UI线程需要做的所有事情)不会成为任何理智的2D应用程序的瓶颈.
Ed *_* S. 10
多线程UI模型不会以更复杂的代价为您提供更多性能吗?
在大多数情况下,并非增加的复杂性在绝大多数情况下弊大于利.您还必须意识到UI框架也必须处理底层操作系统模型.当然,它可以解决模型并抽象出程序员,但在这种情况下它根本不值得.
由多个线程更新UI ad hoc引起的错误数量远远超过大多数无意义的性能增益(如果甚至有增益,由于锁定和同步,线程会带来相关的开销,你可能会实际上只是在很多时候使性能变差.
在这种情况下,最好只在需要时明确使用多个线程.大多数情况下,在UI中,您希望一个线程上的所有内容都通过使用多个线程获得很多东西.UI交互几乎从不成为瓶颈.