在计算机科学中,执行线程是可由操作系统调度的最小处理单元。 这非常抽象!
线程的真实世界/有形/物理解释是什么?
我怎么知道一个应用程序(通过查看它的代码)是单线程还是多线程?
使应用程序多线程有什么好处吗?在哪些情况下可以做到这一点?
是否还有多进程应用程序?
技术是决定是否可以制作多线程操作系统的限制因素吗?它只是设计选择吗?例如是否可以在flex中创建多线程应用程序?
如果有人能给我一个例子或类比来解释这些事情,那将会非常有帮助。
答案 0 :(得分:3)
线程的真实世界/有形/物理解释是什么?
将线程视为可以在给定CPU上同时(同时)执行的独立执行单元。一个很好的比喻就是多辆汽车在同一条路上独立行驶。这里的“汽车”是一个线程,而道路就是那个CPU。因此,所有这些车的功能有点相同:“带动人们”,但是踢球者是人们不应排队等待单车=>他们可以在不同的汽车(线程)中同时驾驶。
但从技术上讲,根据CPU内核的数量和整体硬件/操作系统架构,会有一些context switching
,其中CPU会使它看起来同时发生,但实际上它会从一个线程切换到另一个线程。
我如何判断应用程序(通过查看其代码)是单线程还是多线程?
这取决于几个方面,编写代码的语言,您对语言的理解,尝试完成的代码等等。通常您可以说,但我不相信这会解决任何问题。如果您已经可以访问代码,那么只需询问开发人员就可以了,或者,如果它是开源产品,请阅读文档,在用户论坛上发布以便了解它。
使应用程序多线程有什么好处吗?在哪些情况下可以做到这一点?
是的,请考虑上面的汽车示例。好处= at the same time
和decoupled execution
。例如,您需要计算已知Universe中的启动次数。你可以让一个过程遍历所有星星并计算它们,或者你可以“生成”多个线程,并给每个线程一个星系来解决:“线程1计算银河系中的所有星星,线程2统计全部从仙女座等开始。“
是否还有多进程应用程序?
这是一个术语问题,但最干净的答案是肯定的。例如,在Erlang中,VM能够非常快速地启动许多非常轻量级的进程,其中每个进程都有自己的功能。例如,在Unix服务器上执行“ps -aux / ps -ef”时,您会看到多个“进程”执行,其中每个进程实际上可能有许多线程在执行其工作。
技术是决定是否可以制作多线程操作系统的限制因素吗?它只是设计选择吗?例如是否可以在flex中创建多线程应用程序?
2线程应用程序已经是多线程的。您的笔记本电脑/ PC上很可能已经有2个或更多核心,因此技术总是鼓励您使用这些核心,而不是限制您。话虽如此,问题和要求应该推动决策。不是技术或工具。但是,如果您决定编写多线程应用程序,请确保您了解它们的所有问题和解决方案。到目前为止我用来解决并发性的最好的语言是Erlang,因为并发性只是内置于它。但是,其他语言,如Scala,Java,C#,以及主要是函数式语言,共享状态不是问题也是一个不错的选择。