可以有人解释一下线程吗?

2024-04-19 12:56:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在考虑向我的应用程序添加线程过程以加快执行速度,但问题是我真的不知道如何使用线程,也不知道什么是“线程安全的”。例如,游戏引擎如何在渲染过程中使用线程,或者在什么情况下线程只会被视为一种障碍?有人能指出一些资源来帮助我了解更多或在这里解释吗?在


Tags: 引擎应用程序游戏过程情况资源线程速度
3条回答

线程不能加速应用程序。算法可以加速应用程序。如果合适的话,可以在算法中使用线程。在

关于线程,有四件事你应该知道。在

  1. 线程类似于进程,但它们共享内存。

  2. 线程通常具有硬件、操作系统和语言支持,这可能使它们比进程更好。

  3. 线程需要支持很多琐碎的小东西(比如锁和信号量),这样它们就不会将共享的内存变成不一致的状态。这使得它们有点难以使用。

  4. 锁定不是自动的(在我所知道的语言中),因此您必须非常小心它们(隐式)共享的内存。

这是一个非常广泛的话题。但如果我对线程一无所知,我想知道的是:

  • 它们是单个进程中“并行”发生的执行单元,这意味着处理器中的当前执行单元快速切换。这可以通过不同的方式实现。切换被称为“上下文切换”,并且有一些与此相关的开销。

  • 他们可以分享记忆!这是可能发生问题的地方。我将在后面的要点中更深入地讨论这个问题。

  • 并行化应用程序的好处是使用机器不同部分的逻辑可以同时发生。也就是说,如果进程的一部分是I/O绑定的,而另一部分是CPU绑定的,则I/O密集型操作不必等到CPU密集型操作完成。有些语言还允许您在拥有多核处理器的情况下同时运行线程(因此也可以并行化CPU密集型操作),尽管情况并非总是如此。

  • 线程安全意味着不存在竞争条件,这是一个术语,用于描述当进程的执行依赖于时间(您不想依赖的东西)时发生的问题。例如,举例来说,如果你的线程^{{>}和{}}{{}}{}}{}}的线程C}{{}}读取{{{>}}的价值,然后{{>}读^{{{}}的价值,然后{{}}将{}{{{}}{{}{{{}覆盖{{}改写{{}与{}一起使用。注意,C实际上只增加一次!

  • 避免争用条件的两种常见方法包括同步,它排除了对共享状态的相互访问,或者根本没有任何共享状态。但这只是冰山一角-线程安全是一个相当广泛的话题。

我希望这有帮助!要明白,这是一个非常快速的介绍,需要一点很好的学习。我建议你用你喜欢的语言找到一个关于多线程的资源,不管它是什么,并仔细阅读。在

相关问题 更多 >