进程,线程,协程

进程是什么
通俗理解一个运行起来的程序或者软件叫做进程 1.1 每次启动一个进程都需要向操作系统索要运行资源,让进程中的线程去执行对应的代码,进程是操作系统分配资源的基本单位


线程是什么
如果说进程和进程之间相当于程序与程序之间的关系,那么线程与线程之间就相当于程序内的任务和任务之间的关系。所以线程是依赖于进程的,也称为 「微进程」 。它是 程序执行过程中的最小单元 。


协程是什么,参考go语言的goroutine

用户态线程,可以中断执行的函数,语言层面的调度

通俗来说:与其让操作系统调度,不如我自己来,这就是协程。说白了就是系统调度需要走流程(这里申请一下,那里盖个章),自己办事不求人自然快的多。

协程的好处:

1.无需线程上下文切换的开销
2.无需原子操作锁定及同步的开销
3.方便切换控制流,简化编程模型

缺点:
1.无法利用多核资源:协程的本质是个单线程,它不能同时将 单个CPU 的多个核用上,协程需要和进程配合才能运行在多CPU上
2.进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序


因为协程是微线程,所以这里只讨论进程和线程的区别

问题:进程与线程的区别?

1.进程是最小的资源分配单位(提高系统并发量)线程是最小的调度单位(降低不同任务间
的切换代价)

2.一线程在进程下行进(单纯的车厢无法运行)
一个进程可以包含多个线程(一辆火车可以有多个车厢)

3.不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车比如站点换乘)
同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)

4.进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)

5.进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)

6.进程可以拓展到多机.进程最多适合多核(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上)

7.进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结
束,才能使用这一块内存。(比如火车上的洗手间)-“互斥锁”

8.进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如
果满了需要在门口等,等有人出来了才能进去)-“信号量”

9.进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址
空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的
不同执行路径。

其实本质上是用户栈和内核栈的切换,后面会详细出一篇文章讲讲。


进程的内存分布

1.代码段:主要是程序的代码以及编译时静态链接进来的库。这段内存大小在程序运行之前就已经确定,而且是只读,可能存在一些常量,比如字符串常量。

2. 数据段:分为data和bss两个段,表现为静态内存段,data段存放已初始化的全局变量(静态内存分配的变量和初始化全局变量)。bss段存放未初始化的全局变量,在内存中bss段被清零。

3. 堆 段:用于程序动态内存分配和管理,如何分配和管理由程序的开发者决定,大小不固定(跟您的机器内存有关系),可以动态伸缩。

4. 映射段:该内存区域存放链接其它动态程序库的向量,共享内存映射向量等等。

5. 栈 段:栈是一种先进后出的数据结构,该段内存区域由程序在运行中自行管理,如:局部变量保存和撤除、函数调用相关等。

6. 输入的环境变量和参数段:主要内存程序执行时的环境变量,输入参数等等。

7. 就是系统区域。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值