关于线程数

时间:2012-07-12 06:18:08

标签: objective-c multithreading

我正在阅读ios开发站点中的并发编程指南

当转到“远离线程”部分时,Apple说

  

虽然线程已经存在很多年并且仍然存在   他们的用途,他们没有解决执行的一般问题   以可扩展的方式执行多个任务。有线程,创造的负担   一个可扩展的解决方案完全靠在你的肩膀上   开发商。 您必须决定要创建和调整的线程数   系统条件发生变化时动态的数字。另一个问题   是您的应用程序承担与之相关的大部分成本   创建和维护它使用的任何线程。

按照我之前的学习,操作系统将关注进程线程管理,程序员只需创建和销毁欲望中的线程,

是不是错了?

2 个答案:

答案 0 :(得分:1)

不,没错。它的含义是当你使用线程编程时,大多数时候你会根据程序员在代码中放置的某些条件动态创建线程。例如,查找素数可以用线程分开,但线程的创建和销毁是由程序员完成的。你是完全正确的,只是用更具描述性和精细的方式说出你所说的话。 哦,对于线程管理,有时如果开发人员发现用户需要创建大量线程的大部分时间,那么生成线程池并使用它们会更便宜。

答案 1 :(得分:0)

假设您要执行100个任务,所有任务都使用独立的 - 在任务期间 - 数据。你启动的每个线程都需要相当多的开销。因此,如果你有两个核心,你只想启动两个线程,因为无论如何都要运行。然后,您必须将任务提供给每个线程以使它们保持运行。如果您有100个核心,那么您将启动100个线程。将工作完成的速度提高50倍是值得的。

因此,在老式编程中,你必须完成两项工作。你必须找出你拥有多少个核心,并且必须向每个线程提供任务,以便它们继续运行并且不会浪费核心。 (如果你有> = 100个核心,这只会成为一项工作。)

我相信Apple会为你提供这两个尴尬的工作。

如果您的作业共享数据,则会改变一些事情。有两个线程在运行,一个可以阻塞另一个线程,即使在一个双核机器上也可以运行三个或更多线程。你很容易发现让100个线程一次松散是有意义的,因为它提高了至少有两个线程没有被阻塞的可能性。它可以防止一个被阻止的任务阻止其线程中的其余任务。您需要为线程开销付出代价,但要在高CPU使用率下将其恢复。

因此,此功能有时非常有用,有时则不然。它有助于并行编程,但会阻碍非并行并发(多线程)。