进程 线程 协程 同步 异步 阻塞 非阻塞 IO/CPU密集型

进程 线程 协程

进程是什么?

进程是操作系统进行资源分配和调度的基本概念,可以说进程是线程的容器,一个进程里包括数据区域和堆栈存储着活动过程调用的指令和本地的变量,进程没运行时候处于没有生命的一个实体的状态,运行时依赖处理器给他活体状,一个进程至少有一个线程,如果没有的话那么这个线程就是它本身。

多进程的概念

理论上一个CPU只能给一个进程,如果想一个CPU运行多个进程的话,那就是多进程,就要使用并发技术,实现并发技术非常复杂,说一下简单的并发技术 “时间片轮转进程调度算法” 在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10ms),这样用户根本感觉不出来 CPU是在轮流为多个进程服务,但实际上在任何一个时间内有且仅有一个进程占有CPU。 如果一台计算机有多个CPU,情况就不同了,如果进程数大于CPU数的时候,使用这种并发技术。目前都是几核的CPU都能够处理。

什么是线程?

线程是程序执行流的最小单元,一个线程的信息包括(线程ID,指令集合,堆栈组)组成的线程这种单位,上面进程提到进程是线程的一个容器,说明线程运行在进程里面的,那就是运行在进程里面的一个实体,它不拥有系统资源,但它拥有进程的资源。

线程的三种状态?

1.就绪状态:
是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机的过程。
2.阻塞状态:
是指线程在等待某一个事件(信号量)。
3.运行状态:
是指线程占有处理机正在运行。

多线程?

同时运行多个线程完成不同的工作,就叫做多线程

使用多线程的好处有:

1.资源利用率更好: 想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说,从磁盘读取一个文件需要5秒,处理一个文件需要2秒。处理两个文件则需要14s,在这段时间里,CPU非常的空闲,它可以做一些别的事情,那么我们使用多个线程的话,是不是可以处理文件的同时去读取新的文件,这样就提高了时间效率,
2.程序响应更快:假设做某一个服务的时候,它在某一个端口监听进来的请求,当一个请求到来时,它去处理这个请求,然后再返回去监听。
3.程序设计简单做多线程的时候运用多线程的技术设计非常简单易用,遵循好一些规则,避免造成阻塞等操作,基本可以很快设计程序的需求。
4.使用场景:多线程:密集I/O任务(网络I/O,磁盘I/O,数据库I/O)使用多线程合适

线程与线程主要依靠什么通信

线程间通信主要通过共享内存

什么是协程?

一个程序可以包含多个协程,线程相对独立有自己的上下文,协程也是,但是协程由自己控制,不受操作系统控制,可以不加锁的访问全局变量,所以上下文的切换非常快,可以说是轻量级的线程,也可以说称之为用户级别的线程就叫协程,一个线程可以多个协程,一个进程也可以单独拥有多个协程,线程进程都是同步机制,而协程则是异步。

1.使用场景:又称微线程,在单线程上执行多个任务,用函数切换,开销极小。不通过操作系统调度,没有进程、线程的切换开销。genventmonkey.patchall

多线程请求返回是无序的,那个线程有数据返回就处理那个线程,而协程返回的数据是有序的,处理磁盘的I/O比较慢,处理网络I/O性能还是比较高。

四.进程线程上下文切换

顺便说一下上下文切换上下文切换就是从当前执行任务切换到另一个任务执行的过程。但是,为了确保下次能从正确的位置继续执行,在切换之前,会保存上一个任务的状态。进程上下文切换与线程上下文切换最主要的区别就是线程的切换虚拟空间内存是相同的(因为都是属于自己的进程),但是,进程切换的虚拟空间内存则是不同的。同时,这两种上下文切换的处理都是通过操作系统内核来完成的

摘自:

作者:安静的程序员
链接:https://zhuanlan.zhihu.com/p/58035210
来源:知乎
著作权归作者所有。

什么是阻塞、非阻塞 同步 异步?

异步IO是计算机操作系统对输入输出的一种处理方式:发起IO请求的线程不等IO操作完成,就继续执行随后的代码,IO结果用其他方式通知发起IO请求的程序。与异步IO相对的是更为常见的“同步(阻塞)IO”:发起IO请求的线程不从正在调用的IO操作函数返回(即被阻塞),直至IO操作完成。

老张爱喝茶,废话不说,煮开水。
出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。
1 老张把水壶放到火上,立等水开。(同步阻塞)
老张觉得自己有点傻
2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。
3 老张把响水壶放到火上,立等水开。(异步阻塞)
老张觉得这样傻等意义不大
4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)
最后老张觉得自己聪明了。
所谓同步异步,只是对于水壶而言。普通水壶,同步;响水壶,异步。虽然都能干活,但响水壶可以在自己完工之后,提示老张水开了。这是普通水壶所不能及的。同步只能让调用者去轮询自己(情况2中),造成老张效率的低下。所谓阻塞非阻塞,仅仅对于老张而言。立等的老张,阻塞;看电视的老张,非阻塞。情况1和情况3中老张就是阻塞的,媳妇喊他都不知道。虽然3中响水壶是异步的,可对于立等的老张没有太大的意义。所以一般异步是配合非阻塞使用的,这样才能发挥异步的效用。

IO密集型 cpu密集型

IO密集型(I/O bound)
IO密集型指的是系统的CPU性能相对硬盘、内存要好很多,此时,系统运作,大部分的状况是CPU在等I/O (硬盘/内存) 的读/写操作,此时CPU Loading并不高。

CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。

持续更新中。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值