首页 > 其他分享 >多线程的应用

多线程的应用

时间:2023-11-21 22:31:52浏览次数:39  
标签:异步 应用 阻塞 线程 IO 多线程 cpu

应用之异步调用

以调用方角度来讲,如果

  • 需要等待结果返回,才能继续运行就是同步
  • 不需要等待结果返回,就能继续运行就是异步

1) 设计

多线程可以让方法执行变为异步的(即不要巴巴干等着)比如说读取磁盘文件时,假设读取操作花费了 5 秒钟,如果没有线程调度机制,这 5 秒 cpu 什么都做不了,其它代码都得暂停...

2) 结论

  • 比如在项目中,视频文件需要转换格式等操作比较费时,这时开一个新线程处理视频转换,避免阻塞主线程
  • tomcat 的异步 servlet 也是类似的目的,让用户线程处理耗时较长的操作,避免阻塞 tomcat 的工作线程
  • ui 程序中,开线程进行其他操作,避免阻塞 ui 线程

应用之提高效率

充分利用多核 cpu 的优势,提高运行效率。想象下面的场景,执行 3 个计算,最后将计算结果汇总。如果是串行执行,那么总共花费的时间是 10 + 11 + 9 + 1 = 31ms但如果是四核 cpu,各个核心分别使用线程 1 执行计算 1,线程 2 执行计算 2,线程 3 执行计算 3,那么 3 个线程是并行的,花费时间只取决于最长的那个线程运行的时间,即 11ms 最后加上汇总时间只会花费 12ms注意需要在多核 cpu 才能提高效率,单核仍然时是轮流执行

结论

  1. 单核 cpu 下,多线程不能实际提高程序运行效率,只是为了能够在不同的任务之间切换,不同线程轮流使用cpu ,不至于一个线程总占用 cpu,别的线程没法干活
  2. 多核 cpu 可以并行跑多个线程,但能否提高程序运行效率还是要分情况的,有些任务,经过精心设计,将任务拆分,并行执行,当然可以提高程序的运行效率。但不是所有计算任务都能拆分(参考后文的【阿姆达尔定律】)也不是所有任务都需要拆分,任务的目的如果不同,谈拆分和效率没啥意义
  3. IO 操作不占用 cpu,只是我们一般拷贝文件使用的是【阻塞 IO】,这时相当于线程虽然不用 cpu,但需要一直等待 IO 结束,没能充分利用线程。所以才有后面的【非阻塞 IO】和【异步 IO】优化


标签:异步,应用,阻塞,线程,IO,多线程,cpu
From: https://blog.51cto.com/AmbitionGarden/8507232

相关文章

  • 现代计算机网络的演变与应用
    引言:计算机网络已经成为我们日常生活中不可或缺的一部分。无论是在家庭、学校还是工作场所,我们都离不开与他人和外部世界的连接。随着科技的发展,计算机网络也在不断演变和进步,为我们带来了更多便利和机遇。本文将介绍计算机网络的发展历程、重要应用以及未来趋势。正文:一、计算机网......
  • 5.3 Windows驱动开发:内核取应用层模块基址
    在上一篇文章《内核取ntoskrnl模块基地址》中我们通过调用内核API函数获取到了内核进程ntoskrnl.exe的基址,当在某些场景中,我们不仅需要得到内核的基地址,也需要得到特定进程内某个模块的基地址,显然上篇文章中的方法是做不到的,本篇文章将实现内核层读取32位应用层中特定进程模块基址......
  • Lab6:面向功能程序构造方法及创新应用 (创新)
    1.在C++中通过递归方法实现单链表倒置将代码分为几个部分,顺便把之前的链表建立重新写一遍初始化列表structListNode{ intval; LiseNode*next; ListNode(intx):val(x),next(NULL){}};遍历voidquery_node(){ node*p=head; while(p!=NULL){ cout<<p->data<<''......
  • 实时监控、智能控制:智慧芯片可视化大屏的应用前景展望
    随着科技的不断发展,智能芯片作为一种新型的电子元件,被广泛应用于各个领域,其中智慧芯片可视化大屏是一种重要的应用形式。 一、智慧芯片可视化大屏的优势智慧芯片可视化大屏是一种将智能芯片与大屏幕显示技术相结合的产品,山海鲸智慧芯片可视化大屏运用了指标卡、分组柱状图、百......
  • React 应用构建(环境)
    可以少去理解一些不必要的概念,而多去思考为什么会有这样的东西,它解决了什么问题,或者它的运行机制是什么?一.环境搭建工作编辑器:VisualStudioCode。Javascript解析器、运行环境Node.js的安装。npm安装:npm是Node.js的软件包管理器。二.项目构建1.脚手架构建项......
  • 适用于广泛的物联网应用RM500QAEAA-M20-SGASA、EG25GGB-MINIPCIE、EM06ELA-512-SGAS网
    1、RM500QAEAA-M20-SGASA是一款5Gsub-6GHzM.2模块,尺寸为52.0mm×30.0mm×2.3mm,符合3GPPRelease15规范,针对工业和商业物联网及eMBB应用进行了优化。它支持独立(SA)和非独立(NSA)模式,最大下行链路速率为2.5Gbps,最大上行链路速率为900Mbps。RM500QAEAA-M20-SGASA支持Q......
  • C# 窗体应用程序文件夹内容及各文件功能
     1.每创建一个窗体就会生成三个文件,.cs、.Designer.cs、.resx,.cs是整个窗体的应用程序代码,重点。 2.Properties主要是一些属性信息。3.app.config是配置信息,实现修改配置信息,程序就根据配置信息进行运行。 ......
  • 多线程之start()和run()
    在实例调用的函数中加入打印当前线程的名字,分别用start()方法和run()方法启动线程检查有什么区别:start()123456789101112131415161718192021222324import threadingimport time def worker():    count = 1    while True......
  • 多线程
    进程之间不能共享内存,但线程之间共享内存非常容易。操作系统在创建进程时,需要为该进程重新分配系统资源,但创建线程的代价则小得多。因此使用多线程来实现多任务并发执行比使用多进程的效率高python语言内置了多线程功能支持,而不是单纯地作为底层操作系统的调度方式,从而简化了pyth......
  • YonBuilder应用构建实战案例-体检管理(上)
    YonBuilder平台为开发者提供无代码和低代码的可视化开发能力,并结合开发资产复用,实现快速、简单的应用构建。体检管理是应用构建的典型案例之一,接下来将用两篇文章来讲述此案例。一.业务流程二.功能概述三.使用能力介绍四.实操教程(一).体检套餐1.业务对象创建体检套餐业务对象,以下......