Java Reactor反應器模式使用方法詳解

 更新時間:2020-06-14 04:45:39   作者:佚名   我要評論(0)

Reactor反應器模式


到目前為止,高性能網絡編程都繞不開反應器模式。很多著名的服務器軟件或者中間件都是基于反應器模式實現的,如Nginx、Redis、Netty。
反應器

Reactor反應器模式

到目前為止,高性能網絡編程都繞不開反應器模式。很多著名的服務器軟件或者中間件都是基于反應器模式實現的,如Nginx、Redis、Netty。

反應器模式是高性能網絡編程的必知、必會的模式。

Reactor簡介

反應器模式由Reactor反應器線程、Handlers處理器兩大角色組成:

(1)Reactor反應器線程的職責:負責響應IO事件,并且分發到Handlers處理器。

(2)Handlers處理器的職責:非阻塞的執行業務處理邏輯。

  從上面的反應器模式定義,看不出這種模式有什么神奇的地方。當然,從簡單到復雜,反應器模式也有很多版本。根據前面的定義,僅僅是最為簡單的一個版本。

多線程OIO的致命缺陷

在Java的OIO編程中,最初和最原始的網絡服務器程序,是用一個while循環,不斷地監聽端口是否有新的連接。如果有,就調用一個和處理函數來完成,示例代碼如下:

@Test
 public void client() throws IOException {
   Socket client = new Socket("127.0.0.1", 9999);
   Writer writer = new OutputStreamWriter(client.getOutputStream());
   writer.write("Hello World");
   writer.flush();
   writer.close();
   client.close();
 }
 
 @Test
 public void server() throws IOException {
   ServerSocket server = new ServerSocket(9999);
   while (true){
     Socket socket = server.accept();
     Reader reader = new InputStreamReader(socket.getInputStream());
     print(reader);
     reader.close();
     socket.close();
     server.close();
   }
 }

這種方法的最大問題是:如果前一個網絡連接的handle(socket)沒有處理完,那么后面的連接請求沒法被接收,于是后面的請求通通會被阻塞住,服務器的吞吐量就太低了。對于服務器來說,這是一個嚴重的問題。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

  • 簡單了解Java Netty Reactor三種線程模型
  • 詳解Python的Twisted框架中reactor事件管理器的用法
  • Reactor反應器的實現方法詳解
  • ACE反應器(Reactor)模式的深入分析
  • 學前端,css與javascript重難點淺析
  • 詳解java中的阻塞隊列
  • Java實現8種排序算法的示例代碼

相關文章

  • Java Reactor反應器模式使用方法詳解

    Java Reactor反應器模式使用方法詳解

    Reactor反應器模式 到目前為止,高性能網絡編程都繞不開反應器模式。很多著名的服務器軟件或者中間件都是基于反應器模式實現的,如Nginx、Redis、Netty。 反應器
    2020-06-14
  • Java類加載機制實現流程及原理詳解

    Java類加載機制實現流程及原理詳解

    前言   我們知道,Java項目編譯后會生成許許多多的class文件,class文件保存著類的描述信息。虛擬機把描述類的數據從Class文件加載到內存,并對數據進行校驗、轉化
    2020-06-14
  • Python celery原理及運行流程解析

    Python celery原理及運行流程解析

    celery簡介 celery是一個基于分布式消息傳輸的異步任務隊列,它專注于實時處理,同時也支持任務調度。它的執行單元為任務(task),利用多線程,如Eventlet,gevent
    2020-06-14
  • Django QuerySet查詢集原理及代碼實例

    Django QuerySet查詢集原理及代碼實例

    一 概念 Django的ORM中存在查詢集的概念。 查詢集,也稱查詢結果集、QuerySet,表示從數據庫中獲取的對象集合。 當調用如下過濾器方法時,Django會返回查詢集(而
    2020-06-14
  • Python Django中間件使用原理及流程分析

    Python Django中間件使用原理及流程分析

    一、什么是Django中間件   Django 中間件是用來處理Django的請求request和響應response的框架級別的鉤子,它是一個輕量,低級別的插件系統,用于全局范圍內改變
    2020-06-14
  • Pandas缺失值2種處理方式代碼實例

    Pandas缺失值2種處理方式代碼實例

    處理方式: 存在缺失值nan,并且是np.nan: 刪除存在缺失值的:dropna(axis='rows') 替換缺失值:fillna(df[].mean(), inplace=True) 不是缺失值nan,有默認標
    2020-06-14
  • php獲取小程序碼的實現代碼(B類接口)

    php獲取小程序碼的實現代碼(B類接口)

    效果圖 生成小程序碼的php代碼 public function qrcode(){ $member_id = session('id'); if(empty($member_id)) $this->error('請先登錄'); //推廣
    2020-06-14
  • PyInstaller運行原理及常用操作詳解

    PyInstaller運行原理及常用操作詳解

    pyinstaller 屬于Python第三方庫,使用前需先安裝 # 首先安裝pyinstaller pip install pyinstaller PyInstaller生成可執行程序 # PyInstaller 工具的命
    2020-06-14
  • Python輕量級web框架bottle使用方法解析

    Python輕量級web框架bottle使用方法解析

    Bottle是一個輕量級的Web框架,此框架只由一個 bottle.py 文件構成,不依賴任何第三方模塊。 #!/usr/bin/env python # -*- coding:utf-8 -*- from bottle import
    2020-06-14
  • Python xpath表達式如何實現數據處理

    Python xpath表達式如何實現數據處理

    xpath表達式 1. xpath語法 <bookstore> <book> <title lang="eng">Harry Potter</title> <price>999</price> </book> <book> <title lang="eng">Learning X
    2020-06-14

最新評論

买宝宝用品赚钱吗 辽宁35选7好运2中多钱呀 七星彩排列五正版长条 内蒙古十一选五最大遗漏号码表格 福建快3加奖第一天狂中奖 快乐十分怎么出号码 够力七星彩奖表 股票行情软件排行榜 pc蛋蛋分析软件 上海福彩时时乐开奖 河南快3走势图表6月9号 河北快三走势图今天 十一运夺金奖金 山东体彩11选五遗漏360 平安银行股票分析报告范文 五分快三是不是合法的 平特肖三中三高手论坛