zoukankan      html  css  js  c++  java
  • 线程,限制的异步操作

    限制的异步操作

     

    异步的计算限制操作要用其他线程执行,比如拼写检查,语法检查,音频转码等,为了设计和实现可伸缩性的、响应灵敏和可靠的应用程序和组件,线程池在多个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 很高。

  • 相关阅读:
    成功在C#和VB中将shp转换为CAD
    java 提取字符串中的数字
    java 通用文件下载 excel,pdf,word,jpg,exe,rar
    java org 写excel
    java 通用文件下载 excel,pdf,word,jpg
    重建MDB空间网格大小的工具
    redis5.0 Cluster集群搭建
    选中对象【WPF】自定义控件之依赖属性
    成员函数对象类的const和非const成员函数的重载
    设备注册Linux加载DTS设备节点的过程(以高通8974平台为例)
  • 原文地址:https://www.cnblogs.com/weilai1917/p/11917669.html
Copyright © 2011-2022 走看看