当前位置: 首页 > news >正文

【学习笔记】进程、线程、协程及进程间通信

1>进程

进程是系统进行资源分配的最小单位,有独立的内存空间相对稳定、安全,上下文切换开销大

2>线程

线程是进程的一个实体,是cpu调度的基本单位,比进程更小,且可独立运行,它自己只拥有一点系统资源,与线程通过共享内存通信,上下文切换资源消耗少,但容易丢失数据,与其他线程共享进程拥有的全部资源
一个线程至少占用4MB系统内存

3>协程

一个进程可以拥有多个协程,一个线程也可以拥有多个协程,使用协程可以减少线程切换消耗,在一个线程中可以有多个协程,协程可以决定自己的执行情况以及是否切换。
但是一个进程同时只能运行一个协程,是并发,但不可并行,具体还是在IO密集型任务下通过AIO增加效率。而且协程可以让线程切换需执行的任务而不是只能从上至下执行(线程可以通过goto实现,但抽象成协程更容易理解)

进程间的通信

①管道
存在于内存中的类似文件的东西,可以被进程读写
②消息队列
在内核中的消息队列
③信号量
共享资源的锁
④共享内存
多个进程共享一个给定的存储区
⑤sokect套接字
可用于同电脑进程通信,不过一般用来做不同IP之间的通信。
【套接字是网络通信的端点,上接应用程序,下接通信协议,套接字表示为(127.0.0.1:2312)】
接通流程:服务端监听->客户端请求->建立连接

进程IO步骤

①进程向操作系统发出IO请求
②操作系统将数据加载至内核缓冲区
③操作系统将内核缓冲池数据复制到用户进程缓冲区
④用户进程拿到数据完成处理

三种IO方式

BIO:传统方式,在IO操作中阻塞
NIO:使用多路复用模式,通过selector不断轮询每个channel,如果有channel准备好了,则开始处理
AIO:使用异步IO模式,提前写好数据准备好了之后执行的回调函数,系统会在数据准备好后自动调用

Linux网络IO模型

①阻塞IO
用户进程调用IO操作,内核准备数据给用户进程,期间用户进程死等
②非阻塞IO
用户进程发出IO请求后,会一直询问内核是否准备好数据
③多路复用IO
用户进程一次性给IO发出多个IO请求,只要一个IO请求内核准备好了数据,用户进程就可以立马处理
④异步IO
用户进程在发出IO操作后去做别的事情,内核准备好数据后自动通知用户进程

http://www.lryc.cn/news/621587.html

相关文章:

  • 电脑开机几秒后就停止然后再循环是怎么回事
  • 深入理解 Python 闭包:从原理到实践
  • 永磁同步电机控制 第二篇、电机的分类
  • web学习笔记6
  • 使用原生css实现word目录样式,标题后面的...动态长度并始终在标题后方(生成点线)
  • 硬件开发_基于STM32单片机的热水壶系统
  • 数据结构初阶:排序算法(一)插入排序、选择排序
  • 宋红康 JVM 笔记 Day02|JVM的架构模型、生命周期、发展历程
  • 46.Sentinel规则持久化
  • mlir clone
  • week1-[循环嵌套]画正方形
  • cloudflare缓存配置
  • AAAI爆款:目标检测新范式,模块化设计封神之作
  • StarRocks数据库集群的完整部署流程
  • JavaScript性能优化30招
  • 【车联网kafka】常用参数及其命令总结(第八篇)
  • 计算机网络:(十五)TCP拥塞控制与TCP拥塞控制算法
  • es7.x的客户端连接api以及Respository与template的区别
  • Notepad++插件开发实战指南
  • 【详细操作指南】如何将 Moodle 与编辑器连接,以修改文档、检查和批改作业等
  • HTTP/2新型漏洞“MadeYouReset“曝光:可发动大规模DoS攻击
  • HTTP 请求方法:GET 与 POST
  • STM32L051 RTC闹钟配置详解
  • 《JMeter核心技术、性能测试与性能分析》 教学大纲及标准
  • 硬核实用!R+贝叶斯解决真实问题:参数估计(含可靠性分析) + 回归建模(含贝叶斯因子比较) + 生产级计算实践 赠「常见报错解决方案」秘籍!
  • 电商架构测试体系:ZKmall开源商城筑牢高并发场景下的系统防线
  • Jmeter自定义脚本
  • Easy Rules 规则引擎详解
  • 【测试工具】JMeter基本使用及MySQL数据库压力测试
  • Stagehand深度解析:从开源自动化工具到企业级RPA平台的演进之路