重新开始---sgg-netty----4

我们写客户端:

    

-----------------------------------------------------31-------------------------------------------------

写启动代码。

总结:看文档。

select是阻塞的。

--------------------------------------------------------------32--------------------------------------------------------------

零拷贝:

传统的IO经过四次拷贝和三次切换。

read方法:

 

零拷贝:https://blog.csdn.net/keil_wang/article/details/86688271

第零步:拷贝到硬盘上去。

第一步:硬盘上的数据通过DMA拷贝到内核。

第二步:内核数据用cpu拷贝到用户的buffer。

第三步:数据在用户buffer修改,然后cpu拷贝到socketBuffer。

第四步:DMA拷贝到协议栈。

传统的IO拷贝的次数是非常多的。

-----------------

内存映射:https://blog.csdn.net/paxhujing/article/details/80255526

零拷贝:https://www.jianshu.com/p/7863667d5fa7

-----------------------------------------

三次拷贝两次切换,取消用户态。

---------------

零拷贝是没有cpu的拷贝的,这个是实质。

-----------------------------------------------------33-------------------------------------------------

NIO里面的0拷贝:

   

解释:

----------------------------------------------------34--------------------------------------------------

有效请求才启动线程。

总结对比:

-------------------------------------------------35---------------------------------------------------------

------------------------------------------------------------------------------

netty

异步的基于事件驱动的网络框架。

4.1.2版本我们去讲。

-------------------------------------------------36---------------------------------------------------------

netty得线程模型。

netty是主从的reactor模型。

 

-------------------------------------------------37---------------------------------------------------------

多个连接共用一个阻塞对象,这个是经典,就是select方法。

reactor的三种实现:

每个线程在handler的read方法是注册的。

这个只要一个serviceHandler进行阻塞。

我的理解:就是开始serverSocketChannel注册一个accept事件,然后selector开始select这个事件(这个是阻塞的),有连接,创建一个socketChannet,注册到selector一个read事件,这样就有两个听到了,继续轮询,拿到read事件,会去找channel,在channel里找到缓冲区,去取出数据。

传统的NIO到这里是阻塞的:

并且没有分配线程去执行。

-------------------------------------------------38---------------------------------------------------------

单Reactor单线程。

这个就是传统的模型。

参照聊天系统。

统一封装为handler:

这个模型也就是传统的NIO模型是有问题的,可能会有阻塞的。

一个线程处理多个请求,其实就是减少了线程,但是效率很低了。

验证单reactor单线程的缺点。00:06:14 一个阻塞了 其它的就都完了。

-------------------------------------------------39---------------------------------------------------------

其实多线程是按照请求进行线程,就是事件来了才会创建线程,而不是像之前那样的一个连接是一个线程。

单Reactor多线程。

是连接请求就创建一个handler相当于一个socketchannel。

费时的逻辑 放在线程里面。

-------------------------------------------------40---------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值