1

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

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

尽管线程已经存在很多年并且继续有它们的用途,但它们并没有解决以可扩展方式执行多个任务的一般问题。使用线程,创建可扩展解决方案的重任完全落在了开发人员的肩上。您必须决定创建多少线程,并随着系统条件的变化动态调整该数量。另一个问题是您的应用程序承担了与创建和维护它使用的任何线程相关的大部分成本。

按照我之前的学习,操作系统会处理进程线程管理,程序员只是根据需要创建和销毁线程,

这是错的吗 ?

4

2 回答 2

1

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

于 2012-07-12T06:24:44.123 回答
0

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

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

我相信苹果正在为你提供这两个尴尬的工作。

如果您的工作共享数据,那将改变一切。两个线程运行时,一个可以阻塞另一个,即使在 2 核机器上运行三个或更多线程也是值得的。您很容易发现一次松动 100 个线程是有意义的,因为它提高了其中至少两个线程未被阻塞的机会。它可以防止一个被阻塞的任务阻止其线程中的其余任务。您为线程开销付出了代价,但在高 CPU 使用率下又得到了回报。

所以这个功能有时非常有用,有时又没有。它有助于并行编程,但会阻碍非并行并发(多线程)。

于 2012-07-12T15:09:01.460 回答