多线程:什么是同步与异步?二者的区别

今天看到一道面试题:同步与异步有什么区别?

“同步、异步”这个在我们学习多线程的时候,会接触到这个概念,后面所学的一系列多线程知识运用也是以这两个点开展的。由于学习的时候囫囵吞枣,导致我对这两个概念没法准确说出定义及其区别,现在记录一下。
如果光从字面上理解:

  • 同步,就是一起/同时进行的意思。
  • 异步,分开进行。
    异步从字面上去理解还说得通顺,同步如果按照字面意思去理解就不行了。就如同“并行”与“并发”一样。
    我们先回顾下:

多线程环境中,经常会碰到数据的共享问题,即当多个线程需要访问同一个资源时,他们需要以某种顺序来确保该资源在某一时刻智能被一个线程使用,否则程序的运行结果将不可预料,在这种情况下就必须对数据进行同步。

什么意思呢?

举个栗子,甲乙现在各要打印一份文件(一人一台电脑连接打印机),共享一台打印机。两人同时在自己电脑上操作打印文件。那么这个时候问题来了,如果打印机同时响应两个人的请求,那么是先打印甲的还是乙的,或是两份文件错乱?

面对这样的问题,同步机制就起作用了。当甲乙两个人发出打印请求后,两个线程竞争资源,当甲的线程竞争到资源(打印机)后,乙的线程就一直等待,直到甲的任务完成结束对资源的使用,乙的打印任务才开始。
这就是同步了,简单的说:同步就是任务必须一个个的来进行,a完成了,才可以进行b。
异步操作,这个就比较容易理解。就如同ajax一样,它也是异步的,道理是一样的。不同的线程之间,不一定都是竞争同个资源的,并且如果它们相互之间状态或行为不影响,那么便可以分别进行,同时开展。

举个例栗子,我们使用浏览器的时候,通常都是多开网页的。你打开一个360浏览器(此时便创建了一个进程),然后打开一个网页看小说(线程1),同时打开一个网页看电视剧(线程2)。这两者便是异步。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值