多线程与异步、同步、并发的关系
异步:⼀个请求发起后不必等待结果,继续执⾏下⼀个请求。当请求执⾏完成后,通过状态,通知,回调通知。
同步:⼀个请求完成后才能进⾏下⼀个请求。
并发:⼀段时间内多个程序处于开始到结束之间。
以jquery的ajax来解释同步和异步:
熟悉前端的同学都知道ajax可以配置为异步和同步,那么javascript设计为单线程的模式下真的存在异步吗?
其实javascript引擎是单线程的,但是不代表浏览器是单线程的,除了javascript引擎线程之外,浏览器还存在http请求线程,定时器线程,轮询线程。当发起ajax请求时浏览器会建⽴⼀个http线程去执⾏,⽽javascript引擎线程则继续执⾏列队⾥边的事件,当http请求完成时,http线程会在javascript执⾏列队⾥边加⼊回调函数等待执⾏。这就是ajax异步的原因,同步则会将javascript引擎线程暂时挂起,等待http线程结束。
ajax是同步还是异步以⽤户访问⽹站来解释并发:
当多个⽤户同时访问⽹站时,这时服务端⼀次只处理⼀个请求的话,那么⽤户很多的话,那得等多久。这时就要⽤到多线程了,多个程序同时处理请求这样就快的多了。多个程序同时执⾏的话就是上⾯所说的并发了,这时就有可能出现资源竞争的问题,就得考虑线程同步问题了。
资源竞争:包括同⼀个数据库内的某些数据竞争,或者同⼀个实例的内存竞争。
那为什么会出现资源竞争呢?
内存中有⼀个代码区,多个程序同时执⾏代码区的某个函数时,这时要么竞争数据库⾥边某些数据,要么就是竞争内存中的某些数据。
当遇到存取款和付款时就会有问题,那要怎么解决这个问题呢?
当某位同学去买东西时,他朋友刚好给他打款时,这时他们两同时竞争数据库的余额那笔数据。这时同⼀时间只能允许⼀个操作去修改这⽐数据。在执⾏修改⾦额的⽅法时,打款时不允许扣款的线程跑进来,或者在扣款的时候不允许打款的线程跑进来。这时就要让这两个线程同步。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论