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

【字号: 日期:2023-12-10浏览:28作者:雯心

问题描述

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

问题解答

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

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

回答2:

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

接楼上同学的例子

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

回答3:

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

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

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

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

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

相关文章: