c++ - 什么是进程和线程?

标签 c++ multithreading process operating-system

是的,我已经阅读了很多与操作系统相关的资料。我还在读书。但似乎他们都在以“抽象”的方式描述过程和线程,这对他们的行为和逻辑组织进行了很多高层次的阐述。 我想知道它们是什么物理在我看来,它们只是一些内存中的“数据结构”,由内核代码维护和使用以促进执行的程序。例如,操作系统使用一些进程数据结构(PCB)来描述分配给某个程序的进程的各个方面,例如它的优先级、它的地址空间等。这样可以吗?

最佳答案

要了解进程和线程之间的区别,您首先需要知道的是,进程不运行,线程运行

那么,什么是线程?最接近的解释是 执行状态,例如:CPU 寄存器、堆栈、批处理的组合。您可以通过在任何特定时刻插​​入调试器来证明这一点。你看到了什么?一个调用栈,一组寄存器。差不多就是这样。这就是主线。

那么,什么是过程。嗯,它就像一个用于运行线程的抽象“容器”实体。就操作系统而言,它是一个实体,操作系统分配一些虚拟机,分配一些系统资源(如文件句柄、网络套接字)等等。

它们如何协同工作?操作系统通过为其保留一些资源并启动“主”线程来创建“进程”。然后该线程可以产生更多线程。这些是一个进程中的线程。他们或多或少可以以一种或另一种方式共享这些资源(例如,他们可能需要锁定以免破坏他人的乐趣等)。从那时起,操作系统通常负责维护虚拟机“内部”的那些线程(检测并防止尝试访问不“属于”该进程的内存),提供某种类型的调度这些线程,以便它们可以运行“一个接一个,而不是一直只有一个”。

关于c++ - 什么是进程和线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2319924/

相关文章:

c++ - 验证C中数组的大小

c# - 通过后台 worker 控制获取局域网上的 IP 地址

c++ - linux CFS schedualar下C/C++多线程场景出现意外结果

linux - 为什么会存在僵尸进程?

Python 多处理/套接字 - 错误的文件描述符

c - fork() 的功能

c++ - Opengl 透明部分呈现黑色

c# - 读取文件而不会导致对其他进程的访问被拒绝

c++ - 使用 extern "C"时 C++ 代码中的函数重载

c - timer_settime 在 uClinux 上的 pthread 中调用处理函数