我怎样才能“真正”理解进程和线程?

时间:2017-02-01 06:05:20

标签: linux multithreading process

我正在努力“真正”理解流程&线程 - 我已经阅读过有关它们的书籍和文章,但整体情况似乎总是缺少一些东西。当然,我可以喋喋不休地谈论每个进程如何拥有自己的内存空间以及属于同一进程的线程如何共享相同的内存空间等细节,但我正在寻找来自操作系统和操作系统的内容。内存视角我想 - 比如:

  1. 如何产生它们&记忆中到底发生了什么。
  2. 在IPC和线程间通信期间会发生什么。
  3. 如何在多核系统上处理它们。
  4. 如何在代码中确定上下文? (即函数如何属于进程/线程)。 {希望这很清楚!!!!}
  5. 所有这些使用简单的代码示例都会非常棒。 非常感谢。

1 个答案:

答案 0 :(得分:0)

进程使用执行它所需的所有资源(内存,打开文件,共享内存)封装代码。线程只是进程中的执行,这意味着大致是线程当前指令和调用堆栈的指针。进程至少包含一个线程,但您可以在一个进程中拥有多个线程。

  1. 产生一个过程是操作系统的问题,这可能是非常不同的。 Unix传统上提供允许进程自我克隆的fork(几乎所有内容都是重复的)。产生线程既是语言也是OS(存在从语言线程到OS线程的映射)。 C API包含pthread_create,只为它分配一个新的堆栈,初始化指向某个函数的地址的指令指针。
  2. 没有什么特别之处......线程间通信非常简单,因为它们共享相同的地址空间,但要注意并发性是一个问题。
  3. 一切皆有可能:从一个进程及其在同一核心上的所有线程,到分布在核心集上的线程,并沿着运行进行移动。
  4. 没有属于线程的函数。线程从执行某个函数开始,并在其调用堆栈为空(从此初始调用返回)时终止。