首页 文章 精选 留言 我的

精选列表

搜索[组件设计],共10012篇文章
优秀的个人博客,低调大师

Netty组件之Channel注册

前言 本文将分析EventLoopGroup初始化、EventLoop的选择策略以及Channel是如何通过EventLoop注册到Selector上的。 一、EventLoopGroup类图概览 在客户端示例代码中的中实例化了NioEventLoopGroup,接下来分析下该实例化过程。 EventLoopGroup workerGroup = new NioEventLoopGroup();Bootstrap b = new Bootstrap();b.group(workerGroup); 从以下类图结构io.netty.util.concurrent.AbstractEventExecutorGroup分支主要负责多线程任务的处理;io.netty.channel.EventLoopGroup分支主要负责Channel相关的注册。MultithreadEventExecutorGroup与MultithreadEventLoopGroup分别继承和实现了上面AbstractEventExecutorGroup和EventLoopGroup,将其负责的功能进行融合。 二、构造函数解读 构造函数nThreads:eventLoopThreads线程数量,默认值0时取CPU核数的2倍,可以通过参数io.netty.eventLoopThreads指定Executor:默认ThreadPerTaskExecutorSelectorProvider默认SelectorProvider.provider(),用于开启Selector和ChannelSelectStrategyFactory:SelectStrategy工厂类,默认DefaultSelectStrategyFactoryEventExecutorChooserFactory:EventExecutor选择器,默认为DefaultEventExecutorChooserFactory 三、初始化EventExecutor数组 代码解读EventExecutor[] children:数组大小为nThreads,默认为CPU核数乘以2。EventExecutor继承了EventExecutorGroup本质上为线程框架类Executorchildren[i]:数据元素为EventLoop,本示例中为NioEventLoop。 NioEventLoop类图 NioEventLoop继承了SingleThreadEventLoop,SingleThreadEventLoop同时继承和实现了EventExecutor和EventLoop。即:NioEventLoop拥有了线程类框架处理多线程任务的能力和处理Channel能力。 备注:本文中EventExecutor数组children的元素为NioEventLoop,NioEventLoop同时拥有线程框架能力和Channel注册等处理能力。 四、EventExecutor选择器 第三部分对EventExecutor[] children进行初始化分析,然在使用时如何选择其中一个元素呢?在初始化过程中有以下一行代码,用于初始化EventExecutorChooser。 chooser = chooserFactory.newChooser(children); EventExecutorChooser类图结构 选择策略 @1 如果数组长度是2的幂次方,选择PowerOfTwoEventExecutorChooser,在选取EventExecutor时使用executors[idx.getAndIncrement() & executors.length - 1] @2 如果数组长度不是2的幂次方,选择GenericEventExecutorChooser,executors[Math.abs(idx.getAndIncrement() % executors.length)]。 五、Channel注册 Channel注册入口 选择EventLoop本文为NioEventLoop 绑定Channel到EventExecutor通过DefaultChannelPromise绑定Channel到EventExecutor(NioEventLoop) 将Channel注册到Selector 作者丨梁勇来源丨瓜农老梁(ID:gh_01130ae30a83)欢迎关注公众号“瓜农老梁” 「瓜农老梁学习同行」 本文分享自微信公众号 - 瓜农老梁(gh_01130ae30a83)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

数据库架构组件

1、Oracle的公司的应用程序的广度和重要性。 2、Oracle概述中。强调根的作用。也就是Oracle整体架构,掌握了。那么40%的Oracle知识就可以掌握。 3、静态文件在数据库不启动是就是操作系统的文件,启动后则为数据库进程。 4、动态文件,主要是SGA共享区和一些核心进程。 5、User process主要就是client,而Server process主要是serverServer进程。Server进程的PGA不是共享内存来的。 6、数据库文件(静态文件),主要是配置參数文件、超户文件、数据文件、控制文件、日志文件等。 7、数据库实例(动态文件),主要是用来訪问数据库,包含内存结构和后台进程。 8、连接数据库实例的方式有三种。包含1)User和Server同一台机器的直连方式;2)User和Server通过网络连接;3)浏览器和User通过网络连接,User和Server也通过网络连接。而User处于中间的应用server层。 9、SGA中的Shared Pool的作用。主要是1)Library cache(库缓冲区)主要是用来对SQL语句等进行缓存;2)Data dictionary cache(数据字典缓冲区)主要用来对表等进行缓存。以上两种方法都是为了提高数据库操作的效率。 10、SGA中的Data buffer cache的作用,主要是用来缓存近期频繁使用的用户blocks。 11、Server process的PGA(Program Global Area),是非共享的,仅仅能被Server process写,内存中排序区、Session信息、游标状态。 版权声明:本文博客原创文章,博客,未经同意,不得转载。 本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4666502.html,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册