1:进程

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在当代面向线程设计的计算机结构中,进程是线程的容器,一个进程中至少会有一个主线程。程序是指令、数据及其组织形式的描述,进程是程序的实体。

所谓多进程,大多数下指的是多个进程,但是实质是每个进程里面运行了一个主线程,所以归根结底是一个“多线程”。这里理解的关键是所有程序的运行的基本单位是线程。

多进程请注意进程间通信。Interprocess communication

1)管道

2)系统IPC(消息队列,信号,共享内存)

3)socket

2:进程切换

进行进程切换就是从正在运行的进程中收回处理器,然后再使待运行进程来占用处理器。

这里所说的从某个进程收回处理器,实质上就是把进程存放在处理器的寄存器中的中间数据找个地方存起来,从而把处理器的寄存器腾出来让其他进程使用。那么被中止运行进程的中间数据存在何处好呢?当然这个地方应该是进程的私有堆栈。

让进程来占用处理器,实质上是把某个进程存放在私有堆栈中寄存器的数据(前一次本进程被中止时的中间数据)再恢复到处理器的寄存器中去,并把待运行进程的断点送入处理器的程序指针PC,于是待运行进程就开始被处理器运行了,也就是这个进程已经占有处理器的使用权了。

3:运行中的进程的三个状态

4:线程

线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。

5:多线程

多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。

问题

大多数的计算机都是单处理器(CPU)的,为了运行所有这些线程,操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会降低系统的性能。

这个问题的本质是:如果开启了大量的线程,即使你是多核cpu,那么也会由于对cpu时间的活跃抢夺而产生较高的cpu切换消耗。

多线程请加锁。

6:线程进程区别

线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,线程的运行中需要使用计算机的内存资源和CPU。

操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元。

7:多线程,多进程的硬件支持

假设是一個单核单线程cpu,那么多进程,多线程的意义就在于:大多数的程序都是和资源打交道的,如读取文件,查询数据库,访问网络,这时候多进程,多线程的优势体现在让线程A先用一下CPU去查询数据库,在线程A查询数据库时,CPU是空闲的,线程B就用CPU去读取文件,线程C就用CPU去访问网络。相对于查询数据库,读取文件这些操作来说,CPU的计算时间几乎可以忽略不计。所以,多线程,在这里,实际上是计算机多种资源的并行运用。

这里本质是现代CPU 的速度(GHZ)是真滴快,现代磁盘,内存(500MHZ)的速度是真滴慢。所以多线程,多进程技术能最大化cpu的使用效率。

上面是单核单线程的情况,下面说一下多核多线程的情况。

比如你有一个双核双线程的CPU,你可以理解为你有两个大脑可以同时计算;如果你有一个双核四线程的CPU,你可以理解为你有两个大脑,但是,每个电脑都被分为了两个区域,他们之间可以并行计算,互不影响。实际的情况的双核四线程的CPU其中两个线程的效率低于另外两个线程,且他们在CPU时间分配时,会针对不同的计算任务,如核A的线程一可能擅长图形计算,核A的线程二却擅长浮点计算。

下面假设你有一个4核心的CPU。

那么多线程,多进程的模型就是将多个线程,分配到这4个CPU上,然后再如之前的单核单线程的运行一样。所以在这里,多线程多进程不仅实现了使用多个cpu的功能,也实现了之前说的计算机多种资源的并行使用。

8:协程

协程,首先应该理解为一个函数执行

协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)

可以理解为多个协程,就是多个函数执行,但是这多个函数却并不是串行执行,而是存在一种机制:比如子程序A、B:

假设由协程执行,在执行A的过程中,可以随时中断,去执行B,B也可能在执行过程中中断再去执行A。所以这里可以看到其实已经有异步非阻塞的雏形了。

协程是在一个线程中执行的。

9:协程无法利用多核cpu

nginx的解决方式是多进程 + 协程。每一个请求先对应一个进程,再对应其中一个协程。

10:一点补充,虚拟内存

虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。

Wiki

计算机的操作系统使用硬件和软件的组合,将程序使用的存储器地址(称为虚拟地址)映射到计算机存储器中的物理地址。 主进程存储(如进程或任务所示)显示为连续的地址空间或连续段的集合。 操作系统管理虚拟地址空间以及将实内存分配给虚拟内存。 CPU中的地址转换硬件(通常称为存储器管理单元或MMU)自动将虚拟地址转换为物理地址。 操作系统内的软件可以扩展这些功能以提供可以超过实际存储器容量的虚拟地址空间,从而可以引用比计算机中物理存在的更多的存储器。

关于进程,线程,协程,一点心得相关推荐

  1. Linux的进程/线程/协程系列4:进程知识深入总结:上篇

    Linux的进程/线程/协程系列4:进程/线程相关知识总结 前言 本篇摘要: 1. 进程基础知识 1.1 串行/并行与并发 1.2 临界资源与共享资源 1.3 同步/异步与互斥 1.4 进程控制原语 ...

  2. linux的进程/线程/协程系列5:协程的发展复兴与实现现状

    协程的发展复兴与实现现状 前言 本篇摘要: 1. 协同制的发展史 1.1 协同工作制的提出 1.2 自顶向下,无需协同 1.3 协同式思想的应用 2. 协程的复兴 2.1 高并发带来的问题 2.2 制 ...

  3. linux的进程/线程/协程系列1:进程到协程的演化

    linux的进程/线程/协程系列1:进程到协程的演化 前言 摘要: 1. 一些历史:批处理时代 2. 现代操作系统启动过程 3. 进程(process)的出现 4. 线程(thread)与线程池 5. ...

  4. 简要说明__python3中的进程/线程/协程

    多任务可以充分利用系统资源,极大提升程序运行效率,多任务的实现往往与 多线程,多进程,多协程有关 稳定性: 进程 > 线程 > 协程 系统资源占用量:进程 > 线程 > 协程 ...

  5. linux的进程/线程/协程系列3:查看linux内核源码——vim+ctags/find+grep

    linux的进程/线程/协程系列3:查看linux内核源码--vim+ctags/find+grep 前言 摘要: 1. 下载linux内核源码 2. 打标签方法:vim+ctags 2.1 安装vi ...

  6. Python之进程+线程+协程(异步、selectors模块、阻塞、非阻塞IO)

    文章目录 一.IO多路复用 二.selectors模块 本篇文字是关于IO多路复用的更深入一步的总结,上一篇 Python之进程+线程+协程(事件驱动模型.IO多路复用.select与epoll)对I ...

  7. 进程 线程 协程 各自的概念以及三者的对比分析

    文章目录 1 进程 2 线程 3 进程和线程的区别和联系 3.1 区别 3.2 联系 4 举例说明进程和线程的区别 5 进程/线程之间的亲缘性 6 协程 线程(执行一个函数)和协程的区别和联系 协程和 ...

  8. 进程线程协程-基本概念及特点

    进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代 ...

  9. linux进程线程协程的区别,进程和线程、协程的区别

    现在多进程多线程已经是老生常谈了,协程也在最近几年流行起来.python中也有协程库,tornado中也用了gevent封装好的协程.本文主要介绍进程.线程和协程三者之间的区别. 一.概念 1.进程 ...

  10. python进程线程协程区别_进程和线程、协程的区别

    现在多进程多线程已经是老生常谈了,协程也在最近几年流行起来.python中有协程库gevent,py web框架tornado中也用了gevent封装好的协程.本文主要介绍进程.线程和协程三者之间的区 ...

最新文章

  1. Python + 爬虫:可视化大屏帮你选粽子
  2. PTAV:实时高精度目标追踪框架 | ICCV 2017论文解读
  3. jzoj3519-灵能矩阵【LCM,树形dp】
  4. innodb和my查询速度_吃透MySQL:MyISAM和InnoDB存储引擎详细介绍
  5. android 动态地改变某控件的大小
  6. 如何成为像 Facebook 创始人马克·扎克伯格一样的大佬?
  7. 乱码插入mac mysql汉字乱码问题解决
  8. 论docker中 CMD 与 ENTRYPOINT 的区别
  9. 2022年新版YOLO解读(PP-YOLOE)
  10. 深入理解泊松分布、指数分布、正态分布
  11. 传奇私服服务器修改沙巴克时间,新手教程:如何修改沙巴克名称
  12. 移动端300ms延迟_移动端延迟300ms的原因以及解决方案
  13. python中scale啥意思_scale什么意思
  14. Django_BiDi(双向字符集语言)
  15. Python出现Non-ASCII character '\xe6' in file错误解决方法(pycharm)
  16. P3939 数颜色 (权值线段树)
  17. Java 冒泡排序法
  18. 微软官方制作纯净版的U盘启动盘(详细步骤)
  19. ipynb转py命令
  20. HTML+CSS实现网页分页页码

热门文章

  1. IMPL1. all_fanin/all_fanout命令解析
  2. opencv拟合多边形
  3. python下载安装教程电脑版,python下载好了怎么使用
  4. THUSC2018 (北京4日游)
  5. echarts结合阿里云地图json选择器展示地图
  6. 怎么样将Excel数据中的小数提取出来
  7. Probability and Hypothesis Testing
  8. 【Python实现人脸比对】——打造智能人脸识别系统
  9. IPFS如何冲击我们熟知的网络世界
  10. 数据挖掘实战应用案例精讲-【概念篇】数据湖(补充篇)(Data Lake )