Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 什么';线程有堆栈和进程有堆栈的策略是什么?_Multithreading - Fatal编程技术网

Multithreading 什么';线程有堆栈和进程有堆栈的策略是什么?

Multithreading 什么';线程有堆栈和进程有堆栈的策略是什么?,multithreading,Multithreading,线程有堆栈和进程有堆栈的策略是什么 如果我们有10个进程,我们有多少堆栈,10 如果我们在一个进程下有10个线程,那么我们有多少堆栈,1?所有线程共享同一堆栈 谢谢 每个进程都有自己的堆栈。因此,N个(单线程)进程有N个堆栈 每个线程都有自己的堆栈。因此,一个有N个线程的进程有N个堆栈。每个线程有一个堆栈。5个进程,每个进程有2个线程,相当于10个堆栈。线程->执行上下文->需要自己的资源->自己的堆栈。如果你考虑一下堆栈是什么,那么共享一个堆栈是没有意义的 请记住,这是一个调用堆栈,而不是数据

线程有堆栈和进程有堆栈的策略是什么

如果我们有10个进程,我们有多少堆栈,10

如果我们在一个进程下有10个线程,那么我们有多少堆栈,1?所有线程共享同一堆栈


谢谢

每个进程都有自己的堆栈。因此,N个(单线程)进程有N个堆栈


每个线程都有自己的堆栈。因此,一个有N个线程的进程有N个堆栈。

每个线程有一个堆栈。5个进程,每个进程有2个线程,相当于10个堆栈。

线程->执行上下文->需要自己的资源->自己的堆栈。

如果你考虑一下堆栈是什么,那么共享一个堆栈是没有意义的

请记住,这是一个调用堆栈,而不是数据结构。当指令指针(指示要执行的指令)在程序中移动时,它将遇到函数调用,这些调用会在跳转到被调用函数之前将当前上下文(局部变量,调用前IP)推送到堆栈上。该函数使用堆栈顶部作为其局部变量,等等。完成后,堆栈会弹出,将原始函数的局部变量保留在顶部,并在函数调用后将IP还原为

如果两个线程具有相同的堆栈,它们将共享上下文,但可以想象它们具有不同的IP。如果其中一个线程调用了一个函数,那么堆栈对于另一个线程(仍然在原始函数中)将不再有意义。如果IP是同步的,你没有两个不同的线程-你只是做了两次每件事


正如其他人所说:每个线程、每个进程有一个堆栈。

所以它们没有共享一个堆栈的情况?我碰巧知道的系统中没有这样的情况-或者,为什么要增加额外的开销,试图描述线程之间的调用堆栈?对我来说似乎是不必要的开销。@nobugz,那是不必要的-1。他在回答中特别指出,单线程进程每个都有一个堆栈。