线程栈和进程栈有什么区别

 我来答
约定20125
2018-03-25 · TA获得超过1.5万个赞
知道大有可为答主
回答量:1.1万
采纳率:96%
帮助的人:2883万
展开全部

要搞清线程栈和进程栈的区别,首先要弄清线程和进程之间的关系。

线程和进程有很多类似的地方,人们习惯上把线程称为轻量级进程,这个所谓的轻量级是指线程并不拥有自己的系统资源,线程依附于创建自己的进程。

我们可以从l两个个方面来理解线程的轻量级

1. 调度

由于进程之间的线程共享同一个进程地址空间,因此在进程的线程之间做进程切换,并不会引起进程地址空间的切换,从而避免了昂贵的进程切换。当然不同进程组之间是需要进程切换的

2. 拥有资源

进程是操作系统中拥有资源的独立单位,在创建和撤销进程时,操作系统都会为进程分配和回收资源,资源包括地址空间,文件,IO,页表等。但是由于线程是依附与创建进程的,线程的代码段,数据段,打开文件,IO资源,地址空间,页表等都是和进程的所有线程共享的。

从上面我们看出线程并没有独立的地址空间,这就意味着隶属同一进程的所有线程栈,都在所属进程的地址空间中,他们的栈地址不同,但是如果操作栈时发生越界,是有可能破坏其他线程的栈空间的。

而进程实际上可以看作是主线程,它的栈和其它线程栈没有区别。

单线程只有一个栈,多线程则为每个线程都分配一个栈,并且这些栈的地址不同,可以通过如下方法验证这个结论

1. pslist输出系统进程以及他们的线程,在我的机器上得到如下结果

  • 1889 gnome-session 1918 1926 1940 1969 1957 2282 2283 1971 1972 1973 1975 1998 2003 2010 2669 2691 2710 2776 2871  

  • 1889是主线程,后面是这个进程创建的线程

    2. 对每一个线程ID执行,cat /proc/threadID/maps

    可以看到没个线程的stack地址范围各不相同,这也从侧面验证了每个线程的栈地址在同一进程地址空间的不同地址范围内。

糖炒栗子乐园
2018-03-25 · TA获得超过401个赞
知道小有建树答主
回答量:401
采纳率:69%
帮助的人:82.6万
展开全部
线程和进程分别用的啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式