IO&网络编程
互联网IO与网络编程技术
疾风先生
这个作者很懒,什么都没留下…
展开
-
深入分析Netty高性能特性
C10K与C10M问题C10K&C10M解决方案C10K问题关于C10K的问题,在先前的epoll技术分析文章已经有讲述过,C10K是属于一个优化问题,即要让单个web服务支撑1w的并发连接,关于C10K的性能与可伸缩性问题,摘录C100M的博文并加入自己的理解:采用线程连接架构TBA模型,也就是1个客户端连接对应1个线程,那么对于内核而言,假设这个时候需要10k个连接,那么...原创 2020-05-08 13:38:00 · 804 阅读 · 0 评论 -
Netty事件流程分析补充
pipeline责任链流程分析责任链创建流程入口程序// 责任链的创建是在Channel的初始化的时候进行的// AbstractChannel.javaprotected AbstractChannel(Channel parent) { // 如果当前为服务端的channel,则parent=null this.parent = parent; // 创建channe...原创 2020-04-28 10:46:52 · 867 阅读 · 0 评论 -
深入Netty事件流程分析
Netty框架核心内容丰富的Buffer数据结构Netty在NIO的ByteBuffer基础上自定义一套自己的Buffer API,其实现的Buffer API具备以下特性:如果需要可以自定义自己的buffer类型内建composite buffer类型实现零拷贝机制(无需在内存实现数据复制)可以支持动态扩容,类似于StringBuffer不需要像NIO的Buffer需要每次调用fl...原创 2020-04-23 18:50:23 · 992 阅读 · 0 评论 -
深入Netty组件分析
讲述netty之前,先看下netty的一个整体结构如下:从上述可以看出,netty核心部分主要有基于可扩展性的事件驱动设计模型实现,通用的通信API(支持的网络协议比较丰富)以及基于ByteBuffer实现的零拷贝机制,同时从web的安全性考虑,netty支持SSL/TLS完整协议.分析Netty的原理之前,我们先看看netty的核心组件有哪些.Netty核心组件netty一个简单示例...原创 2020-04-16 10:54:16 · 390 阅读 · 0 评论 -
IO事件驱动设计实现
事件驱动架构EDAEDA组件事件源/发起器(event emitters): 负责轮询检测事件状态的变化解复用器(Demultiplexer): 等待从事件源上获取就绪事件的集合,并将就绪事件通过转发器分发给响应就绪事件的处理器进行回调处理事件处理引擎(event handlers): 响应就绪事件发生的处理程序,由开发人员在应用程序上进行定义并针对就绪事件发生的状态进行注册绑定事件队...原创 2020-04-10 12:21:46 · 658 阅读 · 0 评论 -
高性能IO设计之Reactor模型
在web应用中,为了能够支撑更多的并发连接数,一般会有两种web体系架构设计模式,一种是基于线程的架构,一种是基于事件驱动架构设计。现针对上述两种架构展开分析.基于线程的架构线程与连接1:1模式在服务端使用线程架构的一个基本思想是基于"每个连接对应每个线程"的设计方法,这样设计主要有以下几个方面考虑:可以保证每个请求处理避免线程安全的问题,比如在每个线程中可以使用非线程安全库类完成业...原创 2020-04-02 21:24:00 · 445 阅读 · 0 评论 -
Epoll技术扩展
Epoll技术回顾基于上一篇的epoll技术存在一些问题,对此将纠正部分要点epoll使用技术使用锁的技术读写锁:内核在操作对象进行轮询的时候加读锁,而通过加写锁为了保证唤醒只执行一次,即在网络socket数据报可达,通过中断上下文调用wake_up()方法来触发回调callback方法的执行,通过callback方法将执行的task添加到CPU就绪队列️中,方便CPU进行调度执行...原创 2020-03-14 17:22:19 · 334 阅读 · 0 评论 -
深入epoll技术原理分析
阅读之前请先了解Linux内核的wakeup&callback机制以及前文的select与poll技术分析epoll技术为了解决select&poll技术存在的两个性能问题,对于大内存数据拷贝问题,epoll通过epoll_create函数创建epoll空间(相当于一个容器管理),在内核中只存储一份数据来维护N个socket事件的变化,通过epoll_ctl函数来实现对sock...原创 2020-03-12 18:20:10 · 371 阅读 · 0 评论 -
深入分析select&poll技术原理
IO复用模型本质在讲述IO复用模型之前,需先了解Linux内核的wakeup&callback机制,我们先简单回顾下IO复用模型的思路,从上述的IO复用模型图看出,一个进程可以处理N个socket描述符的操作,等待对应的socket为可读的时候就会执行对应的read_process处理逻辑,也就是说这个时候我们站在read_process的角度去考虑,我只需要关注socket是不是可读状...原创 2020-03-12 18:16:59 · 642 阅读 · 0 评论 -
Linux之Wakeup&Callback机制
Linux内核的休眠与唤醒机制在Linux内核中存在着等待队列的数据结构,该数据结构是基于双端链表实现,Linux内核通过将阻塞的进程任务添加到等待队列中,而进程任务被唤醒则是在队列轮询遍历检测是否处于就绪状态,如果是那么会等待队列中删除等待节点并通过节点上的回调函数进行通知然后加入到cpu就绪队列中等待cpu调度执行.其具体流程主要包含以下两个处理逻辑,即休眠逻辑以及唤醒逻辑.休眠逻辑...原创 2020-03-12 18:13:42 · 1044 阅读 · 0 评论 -
Java之IO模型演进
在先前的文章《Unix之IO模型》已经讲述到5种IO模型以及对应的同步异步和阻塞非阻塞相关核心概念,接下来看下Java的IO模型在服务端的网络编程中是如何演进,注意这里用启动Java程序表示一个JVM进程,而JVM进程中以多线程方式进行协作,这里讲述以线程为主展开Java中的BIO演进BIO 概述在上篇文章中讲述到阻塞式IO是应用进程等待内核系统接收到数据报并将数据报复制到内核再返回的...原创 2020-02-25 22:48:45 · 566 阅读 · 0 评论 -
Unix网络编程之5种IO模型
1. Unix/Linux操作系统简述Unix操作与Linux系统结构图解 (引用计算机操作系统书籍)概要说明用户空间: 姑且将上述用户级别或者是unix编程的应用程序的部分称为用户空间,我们可以通过启动进程来调用内核来完成从硬件设备读取或写入等操作系统内核: 是直接与计算机硬件打交道的应用程序级别,在计算机相关的书籍中也称为操作系统,可以通过操作系统级别提供的一些组件来帮助...原创 2020-02-23 18:44:12 · 572 阅读 · 0 评论