WordPress资讯网站,无锡网站建设唯唯网络,中国建设银行郑州分行网站,个人直播网站开发参考#xff1a;https://juejin.cn/post/6844904130398404616
并发模型
参考#xff1a;https://zhuanlan.zhihu.com/p/137339439
多进程 要点 主进程监听每进来一个请求#xff0c;fork子进程处理 缺点 进程占用高#xff0c;服务器负载高进程间通信困难 参考#xff…参考https://juejin.cn/post/6844904130398404616
并发模型
参考https://zhuanlan.zhihu.com/p/137339439
多进程 要点 主进程监听每进来一个请求fork子进程处理 缺点 进程占用高服务器负载高进程间通信困难 参考https://www.jianshu.com/p/c1015f5ffa74 示例 apache的web容器 多线程与锁 相关概念 线程安全 参考https://www.huaweicloud.com/articles/6b47975275ab65b2c0a1c358d6369715.html代码多线程运行时每次运行的变量预期、结果和单线程运行时是一样的就是线程安全的线程安全问题由全局变量和静态变量引起 锁 模型 互斥锁生产者-消费者同步 优点 易理解容易实现基础语言库都支持其他并非模型的基础 缺点 难测试容易隐藏某些问题线程创建、销毁的开销也不小 单线程回调和事件轮询模型 示例 nginx 参考https://www.modb.pro/db/47207多进程单线程每个worker进程采用异步非阻塞模式事件驱动模型 异步非阻塞采用epoll描述符列表管理交给内核内核有事件发生通知给进程多进程结构、异步非阻塞的处理机制和采用事件驱动模型epoll就是Nginx实现高并发的秘密所在。 函数式编程Clojure之道actor通信顺序进程CSP 一种描述并发性系统之间进行交互的模型参考https://bbs.huaweicloud.com/blogs/292354核心观念 两个并发执行的实体通过通道channel连接起来所有的消息都通过channel传输参考https://juejin.cn/post/6844904130398404616 数据级并行Lambda架构
GPM调度模型
GPM
Goroutinue go关键字创建的实体是一个结构体保存了堆栈信息语言层面实现组成 执行栈状态当前占用线程调度相关数据 sched gobuf协程切换恢复上下文的时候使用 Processor 处理器简历G、M的联系功能 machine和goroutine的连接 数量 默认与GOMAXPROCS一致 组成 性能追踪垃圾回收计时器处理器待运行队列 goroutine列表 Machine 对应操作系统的线程最多线程数GOMAXPROCS通常设置成内核数结构体组成 g0重要,深度参与调度过程goroutine的创建、内存分配curg重要当前线程正在执行的goroutinep正在允许的处理器nextp暂存的处理器old系统调用之前的处理器
运行过程
启动 默认四个线程M、四个处理器P goroutine创建 函数体地址参数起始地址参数长度 goroutine进入队列 调度相关信息更新这里进入的是P的私有队列 又有其他goroutine进来 如果还有空闲P 依次放入空闲P 如果P已满 放入全局队列 M处理完了之后 1、先取对应的P的队列2、再取全局队列3、最后取其他P的队列偷如果还是取不到断开与P的连接进入idle
特点
抢占式调度 在runtime.main中会创建一个额外m运行sysmon函数抢占就是在sysmon中实现的。 G长久阻塞在Mruntime会新建MP会把其他G挂载到新M。 旧G阻塞完成或被认为死掉回收M