首页  >  问答  >  正文

objective-c - 线程同步和异步的区别?IOS中如何实现多线程的同步?

这个关于线程的问题怎么实现?

PHP中文网PHP中文网2754 天前505

全部回复(3)我来回复

  • 高洛峰

    高洛峰2017-04-28 09:07:18

    我说一下我自己的理解啊,理解不深,说错的地方还请指正。

    线程同步是在多线程下才会产生的,多个线程同时访问同一块资源,为了安全高效的访问,就要解决同步访问带来的一系列问题。
    打个比方,两个人从一个篮子里拿苹果,如果一个拿完之后再让另一个拿,那就不会出现问题,可是效率也不高。(totalTime = timeOfA + timeOfB)
    如果让他们同时拿,你拿一个我拿一个,这样效率就高了,可是会出现问题,两个人都抢到一个苹果那该归谁呢,这时可以有几个方法,A拿苹果时B先等着,等A拿到了B在拿。或者A只能拿A这边的,B只能拿B这边的。这样就能解决问题了。
    在iOS上最主要的方法就是在访问期间加锁,等访问完毕在解锁。至于加什么锁怎么加锁,网上很多资料讲的都挺详细的。

    回复
    0
  • 为情所困

    为情所困2017-04-28 09:07:18

    同步 异步 线程同步,是不同的概念

    接楼上同学的例子

    你拿一个苹果,然后我拿一个苹果, 这叫同步执行
    你和我同时去拿苹果,这叫两个线程异步执行,这里为了实现异步,使用了多线程的手段,你和我各属于一个线程
    然后就会出现问题了,如果你和我伸手拿了同一个苹果怎么办? 这个时候就需要你和我进行线程同步,比如:谁先看到篮子,就对篮子加锁,让另一个人等着,拿完之后解锁

    回复
    0
  • ringa_lee

    ringa_lee2017-04-28 09:07:18

    很多人觉得异步就是多线程,这个是不对的,异步和多线程有区别的。

    线程是代码啊,CPU要跑的代码啊,两段线程代码一起跑给人一种没有阻塞的感觉。但这还是代码。CPU还是在那里等着。

    异步主要针对io来说,文件的io,网络请求的io,你不想让同步的io阻塞了进程,所以才有异步方式提高响应能力,异步要去操作系统订阅事件委托闭包函数,和多线程是不能说一样的。

    如果你懂一点硬件,你可以感受一下中断。

    拿大家说的苹果举个例子……
    异步是,你告诉电脑,给我拿个苹果吧。
    电脑就让自己会拿苹果的硬件去响应这个功能啦。跟CPU还有关系么?没了啦。就不耽误CPU的事情啦。
    苹果是网络请求的时候,拿苹果的就是网卡

    回复
    0
  • 取消回复