线程,限制的异步操作

Posted weilai1917

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程,限制的异步操作相关的知识,希望对你有一定的参考价值。

限制的异步操作

 
技术图片

异步的计算限制操作要用其他线程执行,比如拼写检查,语法检查,音频转码等,为了设计和实现可伸缩性的、响应灵敏和可靠的应用程序和组件,线程池在多个CPU内核上调度任务,使多个线程能并发工作,从而高效率地使用系统资源,同时提升应用程序的吞吐能力。

 
技术图片

理解脑图中线程的异步操作能力,不外乎与计算机处于缜密计算与I/O操作,使用线程池,最大效率的使用计算机资源,并行处理能力。同时避免用户模式与内核模式的上下文切换带来的性能损失,从而导致大量线程处于闲置等待,而浪费系统资源。

 
技术图片

掌握线程池的用途、开销之外,最重要的还是以线程池管理,才能更好的控制不可预测的错误,并加以治之。

线程池管理

要想合理地配置线程池,就必须首先分析任务特性,可以从以下几个角度来分析。

  • 任务的性质:CPU密集型任务、IO密集型任务和混合型任务。
  • 任务的优先级:高、中和低。
  • 任务的执行时间:长、中和短。
  • 任务的依赖性:是否依赖其他系统资源,如数据库连接。
  • 性质不同的任务可以用不同规模的线程池分开处理。

CPU密集型任务应配置尽可能小的线程,如配置Ncpu+1个线程的线程池。由于IO密集型任务线程并不是一直在执行任务,则应配置尽可能多的线程,如2*N cpu。混合型的任务,如果可以拆分,将其拆分成一个CPU密集型任务 和一个IO密集型任务,只要这两个任务执行的时间相差不是太大,那么分解后执行的吞吐量将高于串行执行的吞吐量。如果这两个任务执行时间相差太大,则没必要进行分解。建议使用有界队列。

I/O bound 指的是系统的CPU效能相对硬盘/内存的效能要好很多,此时,系统运作,大部分的状况是 CPU 在等 I/O (硬盘/内存) 的读/写,此时 CPU Loading 不高。

CPU bound 指的是系统的 硬盘/内存 效能 相对 CPU 的效能 要好很多,此时,系统运作,大部分的状况是 CPU Loading 100%,CPU 要读/写 I/O (硬盘/内存),I/O在很短的时间就可以完成,而 CPU 还有许多运算要处理,CPU Loading 很高。

以上是关于线程,限制的异步操作的主要内容,如果未能解决你的问题,请参考以下文章

线程也疯狂------计算限制的异步操作

爬虫-高性能异步爬虫

高性能异步爬虫

高性能异步爬虫

异步编程的几种方式

Android AsyncTask 线程限制?