【发布时间】:2015-10-27 12:15:21
【问题描述】:
之前已经提出过密切相关的问题:
但这些问题的答案在某些方面仍然让我不清楚。
第一个问题的提问者询问多线程是否有助于提高性能,而回答者大多表示不会,因为 GUI 不太可能成为现代硬件上 2D 应用程序的瓶颈.但在我看来,这似乎是一种偷偷摸摸的辩论策略。当然,如果您已经仔细构建了应用程序,除了在 UI 线程上调用 UI 之外什么都不做,您就不会遇到瓶颈。但这可能需要大量工作并使您的代码更加复杂,如果您拥有更快的内核或可以从多个线程进行 UI 调用,那么可能就不值得这样做了。
一个普遍提倡的架构设计是让视图组件没有回调并且不需要锁定任何东西,除了它们的后代。在这样的架构下,你不能让任何线程调用视图对象上的方法,使用每个对象的锁,而不用担心死锁吗?
我对 UI 控件的情况不太有信心,但只要它们的回调仅由系统调用,为什么它们会导致任何 特殊 死锁问题?毕竟,如果回调需要做任何耗时的事情,它们会委托给另一个线程,然后我们又回到了多线程的情况。
如果您可以阻塞 UI 线程,您会从多线程 UI 中获得多少好处?因为异步上的各种新兴抽象实际上让您可以做到这一点。
我所看到的几乎所有讨论都假定将使用手动锁定来处理并发,但人们普遍认为手动锁定在大多数情况下是管理并发的不好方法。当我们考虑到专家建议我们更多使用的并发原语(例如软件事务内存,或避开共享内存以支持消息传递(可能与 go 中的同步))时,讨论将如何变化?
【问题讨论】:
标签: multithreading swing concurrency erlang locking