我总是对线程概念感到困惑。到目前为止,我还没有机会在真实的环境中使用它们。如果有人能为我解释线程会很有帮助。
答案 0 :(得分:7)
没有人花时间向我解释一个过程和一个线程之间的区别。一旦你理解了,线程适合的地方很有意义。
操作系统提供要使用的进程内存。启动时的进程通常会在其中运行一个“线程”。
该线程是操作系统安排在CPU上运行的线程,并为其提供一个地址以开始执行指令。
有些比我聪明的人认为,在大多数操作系统中制作流程比创建执行线程要昂贵得多。此外,同一进程中的两个线程可以访问进程内存而无需使用操作系统调用和/或共享内存来执行此操作,这意味着虽然您现在需要同步线程内存访问,但您可以在更少的工作中完成更多工作时间。
因此,线程是一个需要理解的重要概念,它的主要用途是提高具有可被利用的并发性的程序的性能,第一个主要用途(编辑:这可能不是“第一次”使用)正在运行一个线程上的应用程序的GUI,并在另一个线程上执行处理,这是现代用户界面设计的基石。
答案 1 :(得分:7)
一个简单的解释是你有一份工作要做,你就可以找一个人来完成这项工作。
这个人类似于计算机中的线程。
一个人一次可以做一件事,所以为了完成这项工作,他会完成工作任务,一次完成一项任务,每次完成一项任务。
为了加快工作,你可以让更多的人从事同一份工作。例如,假设你需要画一座房子。你雇了4个人来做这件事。
这四个人可能类似于4个线程,因为他们使用相同的资源(同一个房子,相同的油漆桶),他们可以分工。
一个过程类似于绘制那个房子的工作。
这个简单的解释在涉及没有足够CPU核心同时运行所有线程的机器时会有所不同,但我会在这里忽略它。
答案 2 :(得分:2)
单个线程之所以如此命名是因为它是通过代码执行的单个线程。如果您有多个线程,那么您可以同时通过代码执行多个执行线程(或者与单个/多核系统支持同时执行)。虽然使用不同的堆栈,但两个线程都可以访问同一个堆。这意味着程序中的数据可能由两个线程都可见,并且可以由任一线程更改。这当然会导致严重的问题,需要防范。
值得注意的是,线程与进程不同。一个关键的区别是两个线程可以访问相同的数据(堆),而两个进程则不能。
有关更完整的说明,请参阅其他在线说明
答案 3 :(得分:2)
冒着过度简化的风险:
线程是程序执行的一条线。
在您的基本编程模型中,计算机一次只能在程序中跟踪一个语句,并且在任何给定时间,只有一个语句被执行。如果你的程序分支或调用另一个例程,执行将离开控制转移的地方并开始在另一个地方执行,但是,任何时候只做一件事。
使用线程,可以同时执行多行控制。例如,程序的一部分可以与用户交互,而另一部分则在后台下载文件。多线程程序编程起来要困难得多,并且设想它们的工作方式要困难得多。
答案 4 :(得分:0)
维基百科上有一个不错的页面:http://en.wikipedia.org/wiki/Thread_%28computer_science%29
简短摘要:线程是一个轻松的过程
如果您使用线程,请注意每个线程的行为,尤其是相互的资源