首页 > 其他分享 >多线程同步、异步

多线程同步、异步

时间:2023-08-29 10:07:46浏览次数:34  
标签:异步 同步 单线程 用户 任务 线程 一会 多线程


1、首先明确一点,对于单核CPU,任意一个时刻只有一个线程在运行。那么既然这样,多线程还有什么意义呢? 举例来说,现在只有一个人,要做好几个任务。单线程就是,任务一个一个地做,必须做完一个任务后,再去做另一个任务。多线程就是一会做这个任务,一会做那个任务,每个任务做一会,不停的切换。显然,最后把所有的任务做完,多线程必定比单线程更耗费时间。为什么?因为,多线程要在不同的任务之间切换,切换肯定是要耗费时间的。那么问题来了,既然多线程比单线程更耗费时间,为什么还要多线程? 单线程有一个致命的问题,就是一个线程运行的整个过程中,其他线程必须等待,不能响应用户的命令,用户体验太差,好像电脑死机一样。假如单线程,你能想象一下,用户在听歌的时候不能写文档,这种体验也太差了。多线程的时候,单核CPU一会做这个任务,一会做那个任务,切换的时间是毫秒级的,用户完全感觉不出来。从而给用户照成错觉,感觉这些任务并行的运行。

2、同步的使用场景:多个线程同时访问一块数据,也叫共享区。对于多个线程同时访问一块数据的时候,必须使用同步,否则可能会出现不安全的情况。比如数据库中的脏读。但是,多个线程同时访问一块数据,有一种情况不需要同步技术,那就是原子操作,也就是说操作系统在底层保证了操作要么全部做完,要么不做。

3、异步的使用场景:只有一个线程访问当前的数据。比如,观察者模式,没有共享区,主题发生变化,通知观察者更新,主题继续做自己的事情,不需要等待观察者更新完成后再工作。

标签:异步,同步,单线程,用户,任务,线程,一会,多线程
From: https://blog.51cto.com/u_13566975/7272447

相关文章

  • webpack生产环境优化:多线程打包
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:多线程打包多线程打包主要用于需要打包的文件较多的情况下提高打包效率,缩短打包时间。注意:开启多进程打包时,进程开启大概需要600ms,进程通信也有开销。建议:只有工作消耗时间......
  • webpack生产环境优化:多线程打包
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:多线程打包多线程打包主要用于需要打包的文件较多的情况下提高打包效率,缩短打包时间。注意:开启多进程打包时,进程开启大概需要600ms,进程通信也有开销。建议:只有工作消耗时间......
  • 金蝶云星空更换数据中心同步应用数据
    背景:金蝶云星空,企业版8.1,协同开发模式,同一应用多个数据中心。 数据中心:开发环境(本地),测试环境(test),生产环境(pro)。 现状:1、测试环境,创建了应用,二开了业务对象和插件。2、切换到开发环境进行代码调试。  具体操作:1、登录开发环境BOS,登录后打开应用,出现如下  2、......
  • bootstrap页面集成jquery异步请求
    jquery技术是对原生js技术的封装和优化,实现页面上的功能能独立的运行和提交给后台程序,相比之前的用表单整体提交数据可以提高系统的性能,加快响应速度。要在项目中使用jquery必须先引入相关的js脚本,在项目中导入这些js脚本文件:导入后接下来再进行相关技术的操作。实现效果,在一个页面......
  • 多线程|死锁
    publicclassThreadDemo19{privatestaticObjecto1=newObject();privatestaticObjecto2=newObject();publicstaticvoidmain(String[]args){Threadt1=newThread(){publicvoidrun(){synchronized(o1)......
  • 集合遍历使用多线程并行执行
    在业务中常常有这样的需求,需要遍历集合,分别处理,相互之前单独处理,互不影响。为了充分利用服务器资源,可以使用多线程来执行。parallelStream创建一个并行流,使用ConcurrentHashMap使多线程情况下线程安全CompletableFuture.allOf是所有线程全部执行完获得结果CompletableFuture.......
  • Java多线程-实现 生产者-消费者 模式
    多线程实现生产者消费者,堆积满100后停止生产,消费到小于50后继续生产这是一种写法,但是我觉得不太好:它通过循环创建了很多的线程,每个线程只消费/生产一次它使用notifyAll()通知所有的线程唤醒,包括生产者和消费者,感觉产品数量永远也达不到50publicclassProducerimpleme......
  • 多线程以rtsp流调用多路海康摄像头的思考
    如题,我使用了多线程,以rtsp流调用多路海康摄像头。使用了opencv作为拉流库,但是结果不如人意。当摄像头数增加时,cpu占用率变化不大,但是却出现了卡顿。当增大到5个时,甚至发生崩溃。我使用了千兆光纤网,显然不是带宽问题。那会不会是imshwo显示久了不更新呢,显然不是。接受速度快于显......
  • 【校招VIP】java语言考点之多线程&NIO
    考点介绍:多线程&NIO考点是校招面试中的常制点之一。JavaNIO是newIO的简称,是一种可以替代Java10的一套新的IO机制。它提供了一套不同于Java标准1O的操作机制,严格来说,NIO与并发并无直接关系,但是使用NIO技术可以大大提高线程的使用效率......答案详情解析和文章内容可扫下方二维......
  • 细聊C# AsyncLocal如何在异步间进行数据流转
    前言    在异步编程中,处理异步操作之间的数据流转是一个比较常用的操作。C#异步编程提供了一个强大的工具来解决这个问题,那就是AsyncLocal。它是一个线程本地存储的机制,可以在异步操作之间传递数据。它为我们提供了一种简单而可靠的方式来共享数据,而不必担心线程切换或异步上......