职业经验 # 每日一道面试题 # 说说进程和线程关系及区别

金主 for 求职面试圈 · 2017年09月21日 · 最后由 思追 回复于 2018年03月02日 · 2275 次阅读

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
最佳回复

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。如果有兴趣深入的话,我建议你们看看《现代操作系统》或者《操作系统的设计与实现》。对就个问题说得比较清楚。

http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html

最近也在看线程与进程的资料,正好看到阮一峰老师的这一篇文章,生动地解释线程与进程的区别!!http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html

关系:

区别:

共收到 23 条回复 时间 点赞
槽神 回复

线程死掉就等于整个进程死掉?不是吧,非主线程死掉,进程还可以继续吧

记得大学时候老师讲过:进程是 CPU 进行工作的基本单位,而线程则是进程组成的基本单元。
也就是说,一个进程中至少包含一个线程,而同一时间段一个 CPU 只能对一个进程进行操作?

好比弹钢琴 十个手指头是线程 两只手臂是进程

22楼 已删除
20楼 已删除
SinDynasty 回复

task 只是一种叫法 从程序层面来说 还是有进程和线程之分的

最近也在看线程与进程的资料,正好看到阮一峰老师的这一篇文章,生动地解释线程与进程的区别!!http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html

进程有点像操场,带了很多跑步用的设置,而线程像赛道,可以多个并行跑,并一起公用进程里面的资源。共用不好就会死锁。

其实在不同的操作系统下,进程和线程的含义是不同的,在 Win 上就像大家所理解的那样,当然更深的层次要扯到时间片轮转调度机制什么的,而在 Linux 内核上是不区分进程和线程的,有的只是 Task

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。如果有兴趣深入的话,我建议你们看看《现代操作系统》或者《操作系统的设计与实现》。对就个问题说得比较清楚。

http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html

硬件差异:
cpu 是以进程处理的,多核是在处理多个进程或者线程。进程在资源管理器里是 1 个独立的内存单位,但线程是共享内存的。(同可以查资源管理器等工具)

执行过程:
线程不能单独执行,需要依赖于进程,应用进程可以包含多个线程(同可以查资源管理器等工具)
测试中比如压力测试 和测试需求挂钩 一些容器本身就是支持多线程的,起码游戏这边所有压测基本都是多线程的。
如果是多线程的并发,进程是 1 个 master 对象 1 个进程支持多少个线程(叫法上可以不一样),总量就是线程数 * 进程数量。并发时就是多个线程进行,所有线程等待测试结果返回。进程只是反馈线程的存在。
关于多进程的比如一些支持多开的服务起多个进程,比如 flash 的需要访问 834 沙箱,单独有多个进程处理,发起对应协议的请求,验证进程的状态。

说完线程 再来说说协程

关系:

区别:

进程和线程就像一碗面条,进程就像那个碗,多进程就是多个碗。线程就像碗里的面。emmmmm,有点儿饿了

总能看到你 哈哈

我的理解是 进程是一个个独立的 exe ,线程是 exe 里独立的一条条公路

回答不出来的人,肯定没做过开发

进程是进程,线程是线程

看到这个帖子,想问一个问题,jmeter 是线程的,locust 是 gevent(这个 gevent 我也不明白是如何实现的)。这两个。谁做出来的压力测试结果,更加符合真实情况呢?最近在这两个之间纠结

进程是一个程序的执行,线程是在进程中独立的执行序列. 一个进程可以包含很多线程

请楼主先给出你的答案。

—— 来自 TesterHome 官方 安卓客户端

基于这个来说的话,使用进程模拟负载的资源开销相对较大,每个虚拟用户会使用一个单独的 mmdrv.exe 来完成负载的实现,这样做用户之间会相互独立,不互相影响。使用线程方式,那么所有用户都是在一个 mmdrv.exe 上模拟,但使用线程也会存在不稳定的情况,导致用户脚本执行错误。------来自某概念😂

性能测试中负载生成方式好像有进程和线程的区别。

金主 #25 · 2017年09月21日 Author

很经典的一道题,大家积极讨论下

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册