48. 半同步/半异步

本文介绍了半同步与半异步的概念,它们不是IO模型中的同步和异步。半同步/半异步模式结合同步线程处理客户逻辑和异步线程处理IO事件,通过请求队列协调两者。文中详细阐述了半同步/半反应堆(Reactor)模式的两种实现方式,包括工作线程的竞争和通信机制,并指出了各自优缺点。最后总结了同步/异步的区别和Reactor模式的相关知识。
摘要由CSDN通过智能技术生成

本节说到的半同步与半异步跟同步和异步并不是一个概念, 请不要混淆了. 也为了避免混淆, 下面也会对同步和异步做一个简要的说明.


同步/异步

同步和异步是属于IO模型中, 前面已经对IO模型有过接触了( 如 非阻塞IO[1]).

  • 同步 : 内核通知进程有数据到来, 进程从内核空间中将数据复制到应用空间中.
  • 异步 : 内核将数据复制到指定的空间中后通知进程, 进程只管处理数据. 异步不会阻塞.

以上同步和异步简单描述起来可能还是有人不太明了两者的区别. 一句话 : 同步需要进程自己复制数据, 而异步是内核复制好数据之后通知进程(不需要复制).

我们前面所有的IO模型都是同步的.


半同步/半异步

同时使用同步线程和异步线程来实现一个程序, 即半同步/半异步模式.

实现半同步/半异步有三个模块 : 异步处理模块(异步线程), 同步处理模块(同步线程)和队列模块

  • 同步线程 : 处理客户逻辑 (工作线程处理事件).
  • 异步线程 : 处理IO事件.
  • 请求队列 : 保存正在等待被处理的就绪事件队列.

同步线程与异步线程之间的关联 : 异步线程监听到客户请求后, 就将其封装成请求对象插入到就绪队列中. 而请求队列将会通知某个工作在同步模式的工作线程来处理请求. 通知方式取决于实现.

关于半同步/半异步模式也有很多实现方

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值