okhttp能提升响应速度的原因

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/shiningdreamercaihua/article/details/101309876

一、okhttp能提升响应速度的原因
1、keep-alive机制支持,它能保证已经建立过的连接对于相同的host可以复用,减少重新连接造成的网络耗时。尤其在弱网和HTTPS的环境下,减少连接握手的耗时,可带来更好的用户体验。
(原Apache框架中请求使用完后就使用getConnectionManager().shutdown()关闭了连接,keep-alive无法生效)

2、线程池和链接池的管理 :使用了请求线程池和连接线程,能够复用请求线程以及已经建立连接的socket

3、使用Okio进行数据传输,提升了流的读写速度。okio能提升流的读写速度原因如下(对Java io/nio做了很好的封装,性能非常高。)
(1)对数据进行了分块处理,对大数据效率尤为明显;
(2)对数据块使用链表进行管理;
(3)通过一个块池(SegmentPool)对闲置的块进行管理,避免频繁的创建buffer,导致的系统GC。
(4)它对数据的读取写入进行了封装,更简易的接口;
(5)支持超时操作;

二、java nio和io的主要区别:
1、NIO和传统IO(一下简称IO)之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。
Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。

**2、IO的各种流是阻塞的,NIO是非阻塞模式。**这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。 NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取。而不是保持线程阻塞,所以直至数据变得可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。 线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出通道(channel)。

https://blog.csdn.net/u011381576/article/details/79876754

猜你喜欢

转载自blog.csdn.net/shiningdreamercaihua/article/details/101309876