重新开始---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

第一步:DMA拷贝到内核的

第二步:内核和用户的buffer共享数据。这是因为从磁盘到用户内核做了映射了,图是不对的。

第三步:用户buffer修改,内核拷贝到socketBuffer。

第四步:拷贝到协议栈。

此时三次拷贝三次切换。

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

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

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

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

零拷贝是没有cpu的拷贝的。

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

NIO里面的0拷贝:

   

解释:

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

有效请求才启动线程。

总结对比:

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

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

netty

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

4.1.2版本我们去讲。

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

netty得线程模型。

netty是主从得reactor模型。

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

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

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

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

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

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

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

单Reactor单线程。

这个就是传统的模型。

参照聊天系统。

统一封装为handler:

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

一个线程处理多个请求。

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

单Reactor多线程。

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

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

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

发布了374 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_28764557/article/details/104881493
今日推荐