最近我对多线程、并发和并行等概念的理解感到困惑。为了减少困惑,我尝试整理一下我对这些的理解并得出我的结论。我的问题是,
下面的结论是否存在误解或错误?
我引用的引用文献可以在 here 找到.
1。并发和并行是不同级别的范畴。
它既不是并发也不是并行。要么并发,要么非并发,要么并行,要么非并行。
例如,
- 非并发(顺序)/非并行
- 非并发(顺序)/并行
- 并发/非并行
- 并发/并行
2.并行性不是并发性的子集。
3.线程或多线程与并发和并行有何关系?
线程的定义澄清了这一点。线程是“执行流的单元”。这个“执行流程”可以由调度程序独立管理,调度程序通常是操作系统的一部分。
- 拥有一个线程意味着拥有一个执行流单元。
- 拥有多个线程(多线程)意味着拥有多个执行流单元。
并且,
- 拥有多个执行流单元就是让多个事情取得进展,这是并发的定义。
并且,
- 多个单元的执行流程是在单核硬件环境中通过时间切片完成的。
- 多个执行流程单元在多核硬件环境中并行完成。
4。多线程是并发还是并行?
- 多线程或具有多个执行流单元是并发的。
- 多线程本身只是具有多个执行流单元。这与并行性无关。
- 操作系统如何处理多个执行流单元与并行性相关。
- 并行性是通过操作系统和硬件环境来实现的。
- “代码可以并发,但不能并行。” (Parallelism implies concurrency but not the other way round right?, stackexchange)
详细的描述将非常感激。
最佳答案
Parallelism指单个应用程序可以使用比单个 CPU 所能提供的更多计算硬件的任何系统。有许多不同类型的并行计算架构,但是当人们说“并行性”时,他们通常是在特定地谈论一种......
...A Symmetric MultiProcessing (SMP)系统是一台具有一个内存系统和两个或多个对其具有同等访问权限的传统 CPU 的计算机。大多数现代工作站、大多数移动设备和许多服务器系统*都是 SMP。
Multithreading是 concurrent computing 的模型** 计算机科学家可能会告诉您,当两个线程执行的操作交错的顺序不是由程序本身严格确定时,它们会并发运行。当两个线程都已启动且都未完成时,软件开发人员更有可能说两个线程同时运行。
在 SMP 系统上运行的应用程序中实现并行性的一种方法是使用多个并发线程。
* 部分服务器为 NUMA ,它是 SMP 的近亲。在 NUMA 系统中,所有 CPU 都访问相同的内存系统,就像在 SMP 中一样,不同之处在于每个 CPU“拥有”部分物理内存空间,并且它访问自己的内存位置的速度比访问其他内存位置的速度更快。属于其他 CPU。
** 还有其他并发计算模型。有些,例如Actors ,用于生产软件。其他的大多是学术兴趣。
关于multithreading - 关于多线程、并发和并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72270177/