网络Io,发送一次网络请求一般1毫秒到几百毫秒。 磁盘io,一般5毫秒到几百毫秒。两种io每次时间都不固定,即使是取相同的数据。网络Io可能有网络波动导致。

io密集型。cpu不断的发起请求,每次都需要等待几十或几百毫秒。拿到数据后处理速度又是1微妙就解决了。所以大部分时间cpu都在打空转。

本地磁盘转一圈大约5毫秒,如果取的数据比较大,就转很多圈。时间就又很多。

以前cpu从内存取数据都是20纳秒,现在都提升到毫秒级。时间百万倍增长。

怎么提高cpu的利用率,比如网络请求大量数据,1万份。然后创建100个线程,当第一个线程发出请求后,切换线程。其他线程开始依次发送请求。线程不要开的多了。线程切换需要1豪秒,也是要花费时间的,而且切换时cpu也不会工作,线程也会增加内存开销。 创建线程一般考虑cpu的核数,cpu任务执行时间和浪费时间比。这个数越大,需要开的线程越少。又因为线程切换的时间,所以最终结果还是要测试出来。

10万个数据,开100个线程,每个线程1000个任务。有的线程快,有的线程慢。快的线程完成任务后就被销毁了。最后任务还有很多,线程数减少了。相当于cpu性能又降低了。所以这样分配线程有缺陷。

咱们想要的是线程一直存在,然后这样效率就不会低了。可以这样做,就是不把任务平均分配了,每个线程每次处理一个任务,当处理完后,就去这10万个数据里拿任务。直到任务被处理完。每个线程的判断条件就是这10万个数据是否为空,当数据为空了就销毁线程。正好就用到了线程池。线程池帮咱们管理这些线程。

线程池一般使用有界队列,这样才能触发线程扩容。然后线程池在没有任务时线程个数是0,当处理一个任务时,数量变成了核心线程数,当把任务处理完了,也不会降到0,也是降到了核心线程数。 然后就是线程池那一套了。

对时间没有要求的可以使用无界队列。比如网络爬虫,数据处理

网络io,磁盘io,线程池解决思想相关推荐

  1. 后端开发【一大波有用知识】Redis中的IO多线程(线程池)

    一.Redis中的IO多线程原理 ​服务端收到一条信息,给它deconde成一条命令 然后根据命令获得一个结果(reply) 然后将结果encode后,发送回去 redis的单线程是指,命令执行(lo ...

  2. Linux统计进程网络,查看磁盘io、内存free、系统进程ps、网络状态netstat、Linux抓包tcpdump...

    查看磁盘io性能状态 iostat -x 查看磁盘使用(安装包与sar的安装包一起) 主要查看%util [root@shu-test ~]# iostat -x Linux 3.10.0-693.e ...

  3. Android中网络请求创建单个线程池的方法

    创建单个线程池的方法 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; impor ...

  4. SpringBoot——@Scheduled的自定义周期性线程池解决任务延时执行问题

    关注微信公众号:CodingTechWork,一起学习进步. 问题   在使用Spring中的@Scheduled注解设置定时任务时,遇到这样2个问题: 定时任务未按时执行,现象是延后了一段时间才执行 ...

  5. java阻塞线程池_线程池解决阻塞方法

    一.序言 当我们需要使用线程的时候,我们可以新建一个线程,然后显式调用线程的start()方法,这样实现起来非常简便,但在某些场景下存在缺陷:如果需要同时执行多个任务(即并发的线程数量很多),频繁地创 ...

  6. C++ 线程池的思想

    参考:https://zhuanlan.zhihu.com/p/367309864 线程池原理总结 首先你要有一个队列来保存你的任务,任务就是待执行的函数,这个队列叫做同步队列,主要就是队列的操作都带 ...

  7. 如何查看linux网络io,linux 查看CPU内存 网络 流量 磁盘 IO

    使用vmstat命令来察看系统资源情况 在命令行方式下,如何查看CPU.内存的使用情况,网络流量和磁盘I/O? Q: 在命令行方式下,如何查看CPU.内存的使用情况,网络流量和磁盘I/O? A: 在命 ...

  8. Linux 查看CPU 内存 IO使用率,linux 查看CPU内存 网络 流量 磁盘 IO

    使用vmstat命令来察看系统资源情况 在命令行方式下,如何查看CPU.内存的使用情况,网络流量和磁盘I/O? Q: 在命令行方式下,如何查看CPU.内存的使用情况,网络流量和磁盘I/O? A: 在命 ...

  9. 浅谈线程池(中):独立线程池的作用及IO线程池

    在上一篇文章中,我们简单讨论了线程池的作用,以及CLR线程池的一些特性.不过关于线程池的基本概念还没有结束,这次我们再来补充一些必要的信息,有助于我们在程序中选择合适的使用方式. 独立线程池 上次我们 ...

最新文章

  1. Paddle中的数据集合定义与加载
  2. ASP.NET分页方法的了解程度
  3. android 中RecyclerView 嵌套了 GridView 的用法
  4. 利用python开发微信JS-JDK(基于python3.6)
  5. 图解神经网络:卷积、池化、全连接(通道数问题、kernel与filter的概念)
  6. configure: error: You requested LIBYUV but not found...die
  7. 详细讲解32F103/MS51单片机串口ISP程序下载的方法和操作步骤
  8. java程序中空一阁_如何使用JFlex、JavaCUP(详细代码模版) by 踏雪赤兔
  9. 非线性光学近似计算机应用,浅谈非线性光学的发展及应用
  10. Apache——阿帕奇简介
  11. PTA-1016——Phone Bills
  12. 进程间通信的方式有哪些?
  13. 使用结构体输入参加某会议成员的信息,并计算男女比例C++
  14. 解决电脑右侧数字键盘无法打出数字问题
  15. 线性变换+DFT(离散傅立叶变换)+滤波
  16. 宏定义函数和普通函数
  17. easyX安装过程(详细)
  18. 企业喜欢用容易被记住的电话号码(树解法)
  19. android 壁纸服务,Android-Service实现手机壁纸自动更换
  20. 【转载】Cisco 瘦AP回退至胖AP 详细流程

热门文章

  1. 美国 Sinclair 电视台网络全面瘫痪,罪魁祸首系勒索软件
  2. 苹果笔记本快捷键集合
  3. 【JavaSE】零基础入门Java语言
  4. LoRa技术应用场景
  5. 电子技术基础(三)__电路分析基础__正弦交流电的相量表示法
  6. UE4 VR手柄移动转盘
  7. 温度转换HTML,使用JavaScript的温度转换器
  8. In despair
  9. linux和xp区别,请教:谁能简单的说一下,linux系统与xp系统的主要区别吗?
  10. 最短工期 数据结构实现