Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 什么是线(什么是线)?_Multithreading - Fatal编程技术网

Multithreading 什么是线(什么是线)?

Multithreading 什么是线(什么是线)?,multithreading,Multithreading,我总是对线程概念感到困惑。到目前为止,我还没有机会在真实环境中使用它们。如果有人能给我解释一下,那会很有帮助。维基百科上有一个很好的页面: 简短总结:线程是一个轻松的进程 如果使用线程,请注意每个线程的行为,尤其是相互资源的行为。之所以这样命名单个线程,是因为它是通过代码执行的单个线程。如果您有多个线程,那么您就有多个线程同时通过代码执行(或者单核/多核系统支持的同时执行)。虽然使用不同的堆栈,但两个线程都可以访问同一堆。这意味着两个线程都可以看到程序中的数据,并且任何一个线程都可以更改程序中的

我总是对线程概念感到困惑。到目前为止,我还没有机会在真实环境中使用它们。如果有人能给我解释一下,那会很有帮助。

维基百科上有一个很好的页面:

简短总结:线程是一个轻松的进程


如果使用线程,请注意每个线程的行为,尤其是相互资源的行为。之所以这样命名单个线程,是因为它是通过代码执行的单个线程。如果您有多个线程,那么您就有多个线程同时通过代码执行(或者单核/多核系统支持的同时执行)。虽然使用不同的堆栈,但两个线程都可以访问同一堆。这意味着两个线程都可以看到程序中的数据,并且任何一个线程都可以更改程序中的数据。这当然会导致严重的问题,需要采取预防措施

值得注意的是,线程不同于进程。一个关键区别是两个线程可以访问相同的数据(堆),而两个进程不能

有关更完整的说明,请参阅其他联机说明


冒着过分简化的风险:

线程是通过程序执行的一行

在您的基本编程模型中,计算机一次只跟踪您的程序中的一条语句,并且在任何给定时间,只执行一条语句。如果您的程序分支或调用另一个例程,执行将离开控制权转移的位置,并在另一个位置开始执行,但在任何时候都只执行一件事情


对于线程,可以同时执行多个控制行。例如,程序的一部分可以与用户交互,而另一部分则在后台下载文件。多线程程序更难编程,更难想象它们是如何工作的。

没有人花时间向我解释进程和线程之间的区别。一旦你明白了这一点,线程适合的地方就很有意义了

操作系统提供进程内存供使用。进程启动时通常有一个“线程”在其中运行

线程是操作系统计划在CPU上运行的线程,它被赋予一个开始执行指令的地址

一些比我聪明得多的人发现,在大多数操作系统中创建进程比创建执行线程要昂贵得多。另外,同一进程中的两个线程能够访问进程内存,而无需使用操作系统调用和/或共享内存,这意味着尽管现在需要同步线程内存访问,但您可以在更短的时间内完成更多的工作


因此,线程是一个需要理解的重要概念,它的主要用途是提高具有可利用并发性的程序的性能,第一个主要用途(编辑:这可能不是“第一个”用途)是在一个线程上运行应用程序的GUI,并在另一个线程上执行处理,现代用户界面设计的基石。

一个简单的解释是,你有一份工作要做,而你只有一个人来做

这个人就像电脑里的一根线

一个人一次只能做一件事,所以为了完成工作,他要完成工作中的任务,一次一个任务,一次一个任务

为了加快工作速度,你可以让更多的人从事同样的工作。例如,假设你需要粉刷房子。你雇了4个人来做这件事

这4个人可能类似于4个线程,因为他们使用相同的资源(相同的房子,相同的油漆桶)工作,并且他们可以分配工作

一个过程类似于粉刷房子的工作


当涉及到没有足够的CPU核心来同时运行所有线程的机器时,这个简单的解释有些不正确,但我在这里忽略了这一点。

这个问题太宽泛了,无法回答。另外,如果您不需要使用线程,那么就不要使用。做错事太容易了。对我来说,这似乎是一个完全合理的问题,可能会帮助很多人。@johnsa理解这是一个完全合理的问题。并不是所有关于SA的问题都需要深入研究IT和编程的晦涩难懂的深度。这个问题五年前太宽泛了,今天也太宽泛了。这是一个合理的问题,只是太宽泛了。不,不是。这是一个笼统的问题,应该得到一个笼统的回答。广泛的问题:“我的代码不工作,我需要帮助调试”。例如,广泛的问题无法立即得到回答。这个问题很明显,5年后你仍然错了。简单易懂。