线程的同步异步

线程同步、异步的概念:
   1)多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线程处理的数据,而B线程又修改了A线程处理的数据,显然这是由于全局资源造成的,有时为了解决此问题,优先考虑使用局部变量,退而求其次使用同步代码块,出于这样的安全考虑就必须牺牲系统处理性能,加在多线程并发时资源争夺最激烈的地方,这样就实现了线程的同步机制。
   同步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制存在,A线程请求不到,怎么办,A线程只能等待下去。
   异步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为没有同步机制存在,A线程仍然请求的到,A线程无需等待,显然,同步最安全,最保险,而异步不安全,容易导致死锁,这样一个线程死掉就会导致整个线程崩溃,但没有同步机制的存在,性能会有所提升。
   两种异步
  严格的说,异步还是有两种
  一种是等,但是等的过程和同步不一样,等的时候可以做别的工作,但是成像的主线还是等待WaitforSingleObject(hEvent,INFINTE,TRUE);
  另一种是CALLBACK方式,这种异步是完全不等待,程序主线发出请求之后就干别的事情去了,完全不理会请求执行的如何。  所有异步必然涉及两个及以上的线程(不然不涉及异步的问题),
第一种方式下,请求的后期工作是在发出请求的线程上执行,
第二种方式下,后期工作可以在任何线程(通常是执行请求的线程上)完成。

同步异步举例辨析
   举个例子:普通B/S模式(同步)AJAX技术(异步)
  同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能做任何事情。 异步: 请求通过事件触发->服务器处理(这时的浏览器仍然可以做其他事情)->处理完毕.
  同步 就是你叫我去吃饭,我听到了就和你去吃饭,如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。
  异步  就是你叫我,然后你自己去吃饭,我得到消息后可能立刻走,也可能等到下班才去吃。
  所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以更省钱~\/~!
  再举个例子
  简单的说打电话时同步  发信息时是异步。

时间: 2024-10-11 02:46:13

线程的同步异步的相关文章

30分钟读懂进程线程、同步异步、阻塞非阻塞、并发并行

基本概念 1 进程和线程 进程(Process): 是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源.一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程.线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码.进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域的.进程可以理解为一个程序的基本边界.是

js的线程和同步异步以及console.log机制

项目上线了,闲下来就写写东西吧.积累了好多东西都没有做笔记~挑几个印象深刻的记录一下吧. js的同步异步以及单线程问题: 都知道单线程是js的一大特性.但是通常io(ajax获取服务器数据).用户/浏览器自执行事件(onclick.onload.onkeyup等等)以及定时器(setTimeout.setInterval)这些异步操作又是怎样工作的呢. 我们把js的任务分为两种:同步任务,异步任务: 举个例子吧:   let a=1; console.log("同步任务"): setT

GIL锁,线程池,同步异步

1.GIL 是一个全局解释器锁 ,是一种互斥锁 为什么需要GIL:因为一个python.exe进程中只有一分解释器,如果这个进程开启了多个线程都要执行代码 多线程之间要竞争解释器,一旦竞争就有可能出现问题 带来的问题:同一时间只有一个线程可以访问解释器 好处:保证了多线程的数据完全 thread-safe 线程安全的 多个线程同时访问也不会出问题 not thread-safe 非线程安全的 多个线程同时访问可能会出问题 (加锁) 默认情况下一个进程只有一个线程 是不会出现问题的 ,但是不要忘记

进程&线程 同步异步&阻塞非阻塞

2015-08-19 15:23:38 周三 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码 线程安全问题都是由全局变量及静态变量引起的 若每个线程中对全局变量.静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的:若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用 线程不安全就是不提供数

同步/异步 异步回调 协成 线程队列

目录: 同步/异步 异步回调 协成 线程队列 同步|异步: 线程的三种状态: 1.就绪 2.运行 3.阻塞阻塞和非阻塞描述的是运行的状态阻塞 :遇到了IO操作,代码卡住,无法执行下一行,CPU会切换到其他任务非阻塞 :与阻塞相反,代码正在执行(运行状态) 或处于就绪状态 同步和异步指的是提交任务的方式同步 :提交任务必须等待任务完成,才能执行下一行异步 :提交任务不需要等待任务完成,立即执行下一行 代码: 1 def task(): 2 for i in range(1000000): 3 i

并发编程--一堆锁,GIL,同步异步,Event事件

目录 一堆锁 死锁现象(*****) 递归锁 RLock (了解) 信号量 (了解) GIL(*****) 什么时GIL锁 为什么需要GIL锁 Cpython解释器与GC的问题 GIL锁带来的问题 多线程与多进程性能对比 进程池与线程池 同步异步(*****) Event事件 一堆锁 死锁现象(*****) ? 死锁指的是,某个资源被占用之后,一直得不到释放,导致其他需要这个资源的线程进入阻塞状态 产生死锁的情况 对同一把互斥锁,进行了多次加锁 一个共享资源,在访问时必须具备多把锁,但是这些锁被

进程、线程、同步、异步

研究了解了一下这几个概念性问题: 进程.线程: 进程相当于一个软件,线程是这个软件中的某一段程序. 同时打开运行多个软件时就是多进程, 一个软件中可以同时执行多个功能就是多线程. 理论区别: 进程是程序的一次执行,线程可以理解为进程中执行的一个程序片段. 进程间是相互独立的,表现在内存空间,上下文环境,线程运行在进程空间内. 一般来将(不采用特殊技术)进程无法突破进程边界获取其他进程的存储空间,而线程由于处于同一进程空间内,所以同一进程所产生的线程可以共享同一存储空间. 同一进程中两段代码不能同

# 进程/线程/协程 # IO:同步/异步/阻塞/非阻塞 # greenlet gevent # 事件驱动与异步IO # Select\Poll\Epoll异步IO 以及selectors模块 # Python队列/RabbitMQ队列

1 # 进程/线程/协程 2 # IO:同步/异步/阻塞/非阻塞 3 # greenlet gevent 4 # 事件驱动与异步IO 5 # Select\Poll\Epoll异步IO 以及selectors模块 6 # Python队列/RabbitMQ队列 7 8 ############################################################################################## 9 1.什么是进程?进程和程序之间有什么

进程 线程 多线程 并发 同步异步

进程 线程 多线程 并发 同步异步 很多人对进程,线程,多线程,并发,同步,异步等概念感到困惑,这都是大学没好好听课的缘故啊.咱在这里帮感到概念给感到困惑的同学复习下. 程序 程序用来描述计算机所完成的独立功能,并在时间上严格地按前后次序相继地进行计算机操作序列集合,是一个静态概念. 进程 并发执行的程序在执行过程中分配和管理资源的基本单位.是一个动态的执行过程. 进程的静态描述 进程控制块PCB 有关程序段 该程序员对齐进行操作的数据结构集 进程控制块PCB 进程控制块PCB是系统管制进程存在