multithreading - 多线程实际上在单处理器环境中工作吗

标签 multithreading operating-system

假设我们有一个在单处理器中具有多个线程的进程。 现在我知道,如果我们有多个进程,则单处理器中一次只会处理其中一个进程,因此这些进程不是并发的。
如果我的理解是正确的,类似地,每个线程将一次处理,而不是在单处理器中并发。这个说法属实吗?如果是这样,那么多线程是否意味着一个进程中有多个线程,而不意味着一次运行多个线程?这是否意味着在单处理器环境中创建用户线程没有任何好处?

最佳答案

TL;DR:线程的切换比进程更频繁,并且实时地我们会产生并发的影响,因为它发生得非常快。

当你写道:

each thread will be processed at a time and not concurrent in a uni processor

注意“并发”这个词,在uni处理器中没有真正的并发,只有由于进程之间的多次上下文切换而产生的效果。

让我们在这里澄清一下,CPU 的单核可以在给定时间处理一个线程,每个进程都有一个主线程和(如果需要)更多一起运行的线程。如果进程 A 现在正在运行,并且它有 3 个线程:A1(主线程)、A2、A3,只要进程 A 正在被 CPU 核心处理,这三个线程就会运行。当上下文切换发生时,进程 A 不再运行,现在进程 B 将与其线程一起运行。

关于本声明:

there's no benefit of creating user threads in a uni processor environment

事实并非如此。创建线程有一个好处,它们更容易创建(如书中的“生成”)并剪切进程堆内存。与线程相比,创建子进程(书中的“子进程”)是一种开销,因为进程需要拥有自己的内存。例如,每个 google chrome 选项卡都是一个进程而不是线程,但该选项卡有多个并发运行的线程,几乎没有责任。

关于multithreading - 多线程实际上在单处理器环境中工作吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53782567/

相关文章:

Java无限循环性能

python - 类方法线程安全吗?

process - 流程系统的工作原理是怎样的?

c - 操作系统设计竞争条件

c - 内存管理和内存分配之间的区别。当分配/访问发生时它们都一起工作2内存|它们是如何精确相关的

c - 难以理解 fork() 和进程树

java - 在多线程环境中,对象创建是 Java 的瓶颈吗?

c - 线程访问权限

java.lang.IllegalStateException : Not on FX application thread; currentThread = Thread-4 错误

linux - 编译源代码并作为 cron 作业运行