并发模式——半同步半异步、半同步半反应堆

1、同步和异步的介绍

1.1 I/O模型中的同步和异步

在I/O模型中,同步I/O和异步I/O主要的区别是内核向应用程序通知的是就绪事件还是完成事件,以及是由应用程序还是由内核来完成I/O的读写操作

  • 同步I/O:内核向应用程序通知就绪事件,由应用程序自身来完成I/O的读写操作
  • 异步I/O:由内核来完成I/O的读写后向应用程序通知完成事件 

1.2 并发模式中的同步和异步

在并发模式中,同步和异步的主要区别是功能完成的流程是否是顺序化的,是否需要等待 

  •  同步:当遇到阻塞任务时,会一直等待,直到该任务处理完成,程序完全按照代码顺序执行;
  • 异步:程序的执行需要由系统事件驱动,程序的执行是不确定的,没有顺序上的要求 

按同步方式运行的称为同步线程;按异步方式运行的称为异步线程 

2、并发模式

2.1 半同步/半异步模式

在该模式中,使用同步线程处理用户逻辑,使用异步线程处理I/O事件

以Reactor事件处理模式为例:

  • 异步线程监听到客户请求后,将其封装成请求对象并插入请求队列中;
  • 请求队列将通知某个工作在同步模式的工作线程来读取并处理该请求对象;
  • 具体选择哪个同步线程主要取决于请求队列的设计,如轮流选取的Round Robin算法、使用条件变量或信号量等随机选取

2.2 半同步/半反应堆模式

在该模式中,异步线程只有主线程一个,由主线程负责监听所有socket上的事件

 以Reactor事件处理模式为例:

  • 主线程充当异步线程,负责监听所有socket上的事件;
  • 若由新的请求到来,则主线程接受它并得到新的连接socket,然后往epoll内核时间表中注册该socket上的读写事件;
  • 若是已连接的socket上有读写事件发生,主线程将该socket放入共享的请求队列中;
  • 所有工作线程睡眠在请求队列上,当有任务到来时,通过竞争(申请互斥锁)获得任务;
  • 这种竞争机制使得只有空闲的工作线程才有机会来处理新任务,避免了忙闲不均的情况

 2.3 理解的两者的区别(个人理解)

  • 半同步/半异步有多个异步线程,而半同步/半反应堆模式只有主线程一个异步线程;
  • 半同步/半反应堆模式将有事件发生的socket放进共享的请求队列,需要通过竞争来获得任务(半同步/半异步模式的请求队列是共享的吗?)

2.4 半同步/半反应堆模式的缺点

  • 主线程和工作线程共享请求队列,主线程往请求队列中添加任务,工作线程从请求队列中取出任务是互斥的操作,需要对请求队列进行加锁保护,导致白白浪费CPU时间;
  • 每个工作线程在同一时间内只能处理一个客户请求,如果客户较多而工作线程较少,就会导致任务队列中堆积大量的任务对象,此时客户端的响应将越来越慢。而如果通过增加工作线程来解决这个问题,就会因为大量的上下文切换导致消耗大量的CPU时间

参考连接:

 Linux网络编程 | 并发模式:半同步/半异步模式、领导者/追随者模式_凌桓丶的博客-CSDN博客

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
同步反应堆线程池是一种常见的线程池设计模式,用于处理并发任务。它结合了同步和异步的特性,提供了高效的任务处理机制。 在半同步反应堆线程池中,主要包含两种类型的线程:工作线程和反应器线程。 1. 工作线程:负责执行具体的任务。它们从任务队列中获取任务,并按照一定的调度策略进行执行。工作线程可以是多个,可以并行地处理多个任务。 2. 反应器线程:负责监听外部事件,并将事件分发给工作线程进行处理。反应器线程通常采用事件驱动的方式,通过非阻塞IO等机制来实现高效的事件处理。 半同步反应堆线程池的工作流程如下: 1. 外部事件触发,例如网络请求到达或者定时器到期。 2. 反应器线程监听到事件,并将事件加入到任务队列中。 3. 工作线程从任务队列中获取任务,并执行相应的操作。 4. 执行完任务后,工作线程将结果返回给调用方或者进行后续处理。 这种线程池设计模式的优点是: - 提供了高并发处理能力,可以同时处理多个任务。 - 通过异步处理外部事件,提高了系统的响应性能。 - 通过线程池的管理,减少了线程的创建和销毁开销。 然而,半同步反应堆线程池也有一些注意事项: - 需要合理设置线程池的大小,避免线程过多导致资源浪费或者线程过少导致性能瓶颈。 - 需要考虑任务的优先级和调度策略,确保高优先级任务能够及时得到处理。 - 需要注意线程安全性,避免多个线程同时修改共享数据导致的竞态条件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值