我们写客户端:
-----------------------------------------------------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---------------------------------------------------------