进程&线程&并发&堆&堆栈&队列

1 进程(process)

进程,是资源(CPU,内存)分配的基本单位,是运行程序的一个实例;

  • 程序运行时系统会创建一个进程,并分配资源,然后将进程放入进程就绪队列,进程调度器选中他的时候会为其分配CPU资源,程序真正开始运行;
  • 进程有独立的地址空间,每启动一个进程,系统会为其分配一个地址空间,建立数据表来维护代码段,堆栈段和数据段,消耗系统资源较多;
  • 进程通信IPC进行,同步和互斥是难点;
  • 进程间独立,程序健壮性强,进程A不影响进程B;

Linux系统,在父进程中创建子进程,当进程接受到客户端的请求是,可以复制出一个子进程来处理,父进程仅监控请求,然后创建子进程去处理,实现并发.
CPU的核数,表示可以同时执行的进程数,解析一下,CPU可以处理成千上万个进程,但是,CPU每个核每个时刻只能处理一个任务即进程,所以,多任务并行是指同一时刻可以执行的进程数量.

2 线程(thread)

线程,是程序运行的基本单位,是进程的一个执行流,是CPU调度和分配的基本单位.

  • 一个进程可由多个线程组成,线程间共享所有资源,使用相同的地址空间,消耗进程资源;
  • 每个线程有自己的堆栈和局部变量,线程有CPU独立调度执行,多CPU允许多个线程同时运行;
  • 通信方便,共享全局变量;
  • 健壮性弱,一个线程挂掉,整个进程随即挂掉;

3 并发&并行&高并发

3.1 并发(concurrency)

并发:分时运行;
CPU每个核每个时刻只能运行一个程序或计算;多任务来临是,需要进行分时间运行,如设置优先级,单片机中的中断优先级,可以插入运行队列,直接运行,直到结束;

3.2 并行(parallel)

并行:同时运行;
多核CPU可同时指定多个任务;

3.3 高并发(high concurrency)

某一时刻,大量请求向服务器请求资源.
术语:

  • 响应时间: 服务器对请求做出响应的时间;
  • 吞吐量: 单位时间内处理的请求数量;
  • QPS: 每秒响应的请求数量;

4 堆(heap)

4.1 数据结构场景

堆可被看成树状的数组对象,性质:

  • 堆中某节点值不大于父节点值;
  • 堆总是一个完整的二叉树;
  • 根节点最大的堆称为最大堆或大根堆,根节点最小的堆称为最小堆或小根堆,常见有二叉堆,斐波那契堆;
  • 堆是在程序运行时,不是在编译时,申请某个大小的内存空间,即动态分配内存;
  • 由程序员分配释放,若不释放,程序结束可能由操作系统回收,类似于链表分配方式;
  • 使用二级缓存,声明周期由虚拟机的垃圾回收算法决定,调用速度慢一些;

4.2 内存场景

5 栈(stack)

5.1 数据结构场景

栈是堆栈的简称,是一种抽象数据类型,由操作系统自动分配释放,存放函数参数值,局部变量等.
特性:

  • 后进先出(LIFO);
  • PUSH数据入站,POP数据出栈;
  • 类似于数据水桶,后进先出;
  • 栈使用的是一级缓存,调用完即释放;

5.2 内存场景

6 队列(queue)

特殊的线性表,特点:

  • 删除操作,只能在表前端(front);
  • 插入操作,只能在表后端(rear);
  • 插入操作的端称为队尾,删除操作的端称为队首;
  • 先进先出(FIFO);

7 同步&异步

同步通信(synchronous communication),异步通信(asynchronous communication)描述的是消息通信机制。

7.1 同步通信

  • 解释
    一问一答,结束;即问题发出后,等待回复结果,直到结果返回,问答结束;
  • 微信或QQ语音聊天
    A问:发起请求?(一直等待)
    B答:接收请求。
    AB完成对话,即结束。

7.2 异步通信

  • 解释
    一问,结束,回复;即问题发出后,不会立即返回结果,通信结束,回复方有答案之后,向问题发出者回复答案;
  • 使用微信或QQ文字聊天
    A问:你干什么?(问了问题之后,退出软件)
    结束,信息已经发出,就可以做别的事情了。
    n分钟后
    B答:(回复)我去逛街了
    结束
    A发出信息,不用实时监视(等待)B是否回复,可以做其他事情(此时无返回消息结果),等B有时间,自然会回复。

8 阻塞&非阻塞

阻塞(block),非阻塞(non-block)描述线程等待返回结果时的状态。

8.1 阻塞

  • 解释
    请求数据线程中的A函数发起请求,等待返回数据,若无数据返回,该线程挂起即进入阻塞状态,A函数一直等待,该线程占线,不能执行其他操作,直到A函数得到结果,继续执行其他操作;
  • 打电话
    A拨打:123
    123:无人接听
    A:一直等待
    123:喂
    A:打通了
    结束

8.2 非阻塞

  • 解释
    请求数据线程A函数发起请求,不等待数据返回,此时无返回结果,该线程执行A函数后面函数,但需要A隔一定时间去检查是否有结果返回;
  • 打电话
    A:拨打123
    123:无人接听
    A:离开电话亭或手机(未挂断),去做其他事情,但时不时去电话亭看看有没有人回应;
    123:我在,通话完成;

9 总结

  • 同步&异步是信息收发,阻塞&非阻塞是线程状态,阻塞和非阻塞线程都是运行的,区别是执行线程中函数状态,阻塞则等待A函数的结果,非阻塞,不等待A函数结果,继续执行B函数。
  • 同步异步结合阻塞和非阻塞,出现了同步阻塞等。

[参考文献]

[1]https://www.cnblogs.com/zhuzhu2016/p/5804875.html
[2]https://www.cnblogs.com/zhuzhu2016/p/5804875.html
[3]https://blog.csdn.net/DreamWeaver_zhou/article/details/78587580
[4]https://baike.baidu.com/item/%E5%B9%B6%E5%8F%91/11024806?fr=aladdin
[5]https://jingyan.baidu.com/article/6c67b1d6a09f9a2786bb1e4a.html
[6]https://www.cnblogs.com/Anker/p/5965654.html
[7]https://blog.csdn.net/K346K346/article/details/80849966/


更新ing
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然玩家

坚持才能做到极致

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值