Kestrel是aspnetcore中的web服务器之一,其本身有跨平台,轻量级,高性能的特点

在 ryzen 1600 12核cpu 测试环境中,瞬间每秒处理请求数能达到2w5以上,与netty不相上下,相当于同样环境下iis ASP.NET处理能力的3倍左右

为了了解Kestrel为什么如此强劲,我从github上下载了源代码进行分析,地址是:

https://github.com/aspnet/KestrelHttpServer

Kestrel端口监听参数使用的是 EndPoint ,包含了需要监听的IP和端口信息

对于每一个 EndPoint ,使用一个 ITransport 实例进行监听, ITransport 由 ITransportFactory 工厂创建

ITransportFactory  为单实例,默认为  SocketTransportFactory ,该工厂由  UseKestrel 的启动参数设置

Kestrel的有两种TransportFactory的实现

Kestrel.Transport.Libuv

Kestrel.Transport.Sockets

在启动时,首先从 ServiceCollection 中获取到 ITransportFactory  ,使用工厂再创建一个 ITransport

SocketTransport 在初始化时创建一个调度器数组  _schedulers = PipeScheduler[]

数组大小为 ioQueueCount , ioQueueCount 从配置中读取,默认数量为cpu线程数,线程数不足16的情况下为16

如果指定了 ioQueueCount 的情况下,并且值为0,将会抛出异常

在 SocketTransport 中调度器使用的是 IOQueue 实现,其具体实现是通过  ThreadPool.QueueUserWorkItem  往线程池中工作队列添加工作任务

SocketTransport 启动后,将会运行一个循环任务,每次循环会循环所有调度器,通过 awit AcceptAsync 获取请求信息,然后交给调度器执行连接

对于Socket数据处理部分,使用的是异步Socket,Scoket不同平台的实现是不一样的

在Windows下,Scoket是对windows socket2的简单封装,windows socket2是一套支持阻塞/无阻塞的win32api

对于linux下的实现,我目前还在研究中,对其理解还不够深入

一般情况下,调度器的数量对Kestrel的处理能力影响不是很大,Kestrel对于请求的处理,都是通过往线程池添加工作任务来完成,其处理速度由线程池中的线程数量决定

总的来说,Kestrel是对异步Socket的简单封装,并利用线程池,内存池,实现了Actor模型,所有的请求都是无阻塞处理的,所以在处理能力上提升很大

当然,aspnetcore中间件管道模式也是其性能好的原因之一

netcore高性能Web服务器Kestrel分析的更多相关文章

  1. nginx高性能WEB服务器系列之八--nginx日志分析与切割

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  2. 再谈高性能Web服务器,MemoryPool的作用

    在以往使用c#实现scoket服务器中,通常遇到一个问题就是内存占用高,GC次数频繁,导致处理能力直线下降 其主要原因是在处理socket请求时,大量的申请,复制内存,为了解决这个问题,NET Cor ...

  3. nginx高性能WEB服务器系列之九--nginx运维故障日常解决方案

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  4. nginx高性能WEB服务器系列之七--nginx反向代理

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  5. nginx高性能WEB服务器系列之六--nginx负载均衡配置+健康检查

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  6. nginx高性能WEB服务器系列之五--实战项目线上nginx多站点配置

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  7. nginx高性能WEB服务器系列之四配置文件详解

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  8. nginx高性能WEB服务器系列之三版本升级

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  9. nginx高性能WEB服务器系列之二命令管理

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

随机推荐

  1. C++STL stack

    stack栈 先进后出 stack<int> s ; s.push();//元素入栈 //出栈 while(!s.empty()){ int tmp = s.top(); s.pop(); ...

  2. DocumentType类型

    并不常用 nodeType 10 nodeName doctype的名称 NodeValue 值为null parentNode Document 不支持子节点 DocumentType不能动态创建, ...

  3. Nodejs 传图片的两种方式

    node上传图片第一种方式 1,首先引入模块 "connect-multiparty": "~1.2.5", 在package.json中添加 "co ...

  4. 词袋模型(BOW, bag of words)

    词集模型:单词构成的集合,每个单词只出现一次. 词袋模型:把每一个单词都进行统计,同时计算每个单词出现的次数. 在train_x中,总共有6篇文档,每一行代表一个样本即一篇文档.我们的目标是将trai ...

  5. visual studio的试用版评估期已结束 解决办法

    启动visual studio 2008后显示对话框:visual studio的试用版评估期已结束.下面有两个按钮,点第一个链接到微软网页,第二个直接关闭.虽然大多数高手已经知道如何解决,但对菜鸟来 ...

  6. ActiveMQ -5.9和jms-1.1源码下载

    ActiveMQ-5.9和jms-1.1源码下载:见附件

  7. 读书笔记 Bioinformatics Algorithms Chapter5

    Chapter5  HOW DO WE COMPARE DNA SEQUENCES  Bioinformatics Algorithms-An_Active Learning Approach htt ...

  8. 最完美的Linux桌面软件

    下面是关于Linux桌面环境下,目前为止最完美的部分.之所以说他们完美,是因为他们不但很养眼,而且也使用最好的多媒体技术,有最好的可用性.在某些方面,他们甚至超过了Windows和Mac-OS. 基础 ...

  9. 2018-04-11 activity周期

    android相机开发 1.Android wifi热点连接过程 2.bindservice和AIDLhttps://blog.csdn.net/zhou_wenchong/article/detai ...

  10. C++二级指针第一种内存模型(指针数组)

    二级指针第一种内存模型(指针数组) 指针的输入特性:在主调函数里面分配内存,在被调用函数里面使用指针的输出特性:在被调用函数里面分配内存,主要是把运算结果甩出来 指针数组 在C语言和C++语言中,数组 ...