当我从一个进程创建多个线程时,那么每个线程都有自己的堆栈,还是它们共享父进程的堆栈?线程进行系统调用时会发生什么?线程是否也像进程一样维护自己的内核栈?每个线程都有自己的堆栈吗?
回答
是的线程有自己的堆栈和他们自己的内核堆栈(例如linux)。
当一个线程进行系统调用时,陷入内核模式(从用户模式),将参数传递给内核,检查参数,内核做它需要做的事情(在内核中堆栈),将最终值返回给线程,并返回用户模式。
内核如何在没有堆栈的情况下“做它需要做的事情”? – avakar
我会在我的回答中予以澄清 – Joohwan
内核堆栈只是添加到预先存在的模型中的安全预防措施。多堆栈是多线程的先决条件。内核本质上提供了用户空间中发生的任何并行版本,以防止敏感数据泄露。 – Potatoswatter
- 1. 每个进程都有自己的内核堆栈,对吧?
- 2. 每个'HttpRequest'在ASP.NET中都有自己的线程吗?
- 3. 为什么GHC为每个线程都有一个堆栈?
- 4. 每个线程都不需要它自己的JVM副本吗?
- 5. 每个应用程序是否都实现了自己的网络堆栈?
- 6. 每个程序在内存中都有其自己的分段段(代码,堆栈,数据)吗?
- 7. 在linux中,所有内核进程共享相同的内核堆栈,每个用户进程都有自己的堆栈,对吗?
- 8. 每个进程都有自己的stdin,stdout和stderr吗?
- 9. 每个进程都有自己的页表吗?
- 10. 每个托管线程是否都有自己对应的本地线程?
- 11. 有了MVVM,每个UI窗口都有自己的ViewModel吗?
- 12. 程序的每一行都有自己的地址吗?
- 13. 在多线程Java程序中,每个线程都有自己的System.out副本吗?
- 14. 每个进程有多个堆栈?
- 15. Plotly等高线每个都有自己的色条
- 16. 每个CALayer都有它自己的CGContextRef吗?
- 17. 每个存储库都有自己的hg serve实例吗?
- 18. 每个类都必须拥有自己的OnClickListener吗?
- 19. 每个用户都有自己的数据库表吗?
- 20. 每个宝石都有自己的耙子吗?
- 21. 每个活动都必须有自己的模型吗?
- 22. 每个php-fpm池都有自己的内存池吗?
- 23. 应该每个组件都有自己的mapDispatchToProps吗?
- 24. “每个JVM线程都有自己的程序计数器”是什么意思?
- 25. 每个线程或每个方法的堆栈调用?
- 26. 多缓存可以有自己的etags标记堆栈吗?
- 27. cpp对象方法有自己的堆栈框架吗?
- 28. 每个VCL表单都应该有自己的消息循环/泵线程?
- 29. 打印一个进程的所有线程的线程堆栈
- 30. python多处理每个都有自己的子进程(Kubuntu,Mac)
是线程特定的堆栈!,全局值可以在线程之间共享(本地不可用) –
@GrijeshChauhan当我们从一个线程进行系统调用时会发生什么?例如,如果您调用'open()'系统调用来打开文件,则为 –
。使用'int f = open()'然后当然'f'是线程本地的。但请记住文件描述符是在这些线程之间共享的。如果你知道'f'的值,那么你可以在不同的线程中使用该值来访问相同的文件(不需要再次打开) –