线程同步、异步的概念:
1)多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线程处理的数据,而B线程又修改了A线程处理的数据,显然这是由于全局资源造成的,有时为了解决此问题,优先考虑使用局部变量,退而求其次使用同步代码块,出于这样的安全考虑就必须牺牲系统处理性能,加在多线程并发时资源争夺最激烈的地方,这样就实现了线程的同步机制。
同步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制存在,A线程请求不到,怎么办,A线程只能等待下去。
异步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为没有同步机制存在,A线程仍然请求的到,A线程无需等待,显然,同步最安全,最保险,而异步不安全,容易导致死锁,这样一个线程死掉就会导致整个线程崩溃,但没有同步机制的存在,性能会有所提升。
两种异步
严格的说,异步还是有两种
一种是等,但是等的过程和同步不一样,等的时候可以做别的工作,但是成像的主线还是等待WaitforSingleObject(hEvent,INFINTE,TRUE);
另一种是CALLBACK方式,这种异步是完全不等待,程序主线发出请求之后就干别的事情去了,完全不理会请求执行的如何。 所有异步必然涉及两个及以上的线程(不然不涉及异步的问题),
第一种方式下,请求的后期工作是在发出请求的线程上执行,
第二种方式下,后期工作可以在任何线程(通常是执行请求的线程上)完成。
同步异步举例辨析
举个例子:普通B/S模式(同步)AJAX技术(异步)
同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能做任何事情。 异步: 请求通过事件触发->服务器处理(这时的浏览器仍然可以做其他事情)->处理完毕.
同步 就是你叫我去吃饭,我听到了就和你去吃饭,如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。
异步 就是你叫我,然后你自己去吃饭,我得到消息后可能立刻走,也可能等到下班才去吃。
所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以更省钱~\/~!
再举个例子
简单的说打电话时同步 发信息时是异步。