高洛峰2017-04-28 09:07:18
线程同步是在多线程下才会产生的,多个线程同时访问同一块资源,为了安全高效的访问,就要解决同步访问带来的一系列问题。
打个比方,两个人从一个篮子里拿苹果,如果一个拿完之后再让另一个拿,那就不会出现问题,可是效率也不高。(totalTime = timeOfA + timeOfB)
如果让他们同时拿,你拿一个我拿一个,这样效率就高了,可是会出现问题,两个人都抢到一个苹果那该归谁呢,这时可以有几个方法,A拿苹果时B先等着,等A拿到了B在拿。或者A只能拿A这边的,B只能拿B这边的。这样就能解决问题了。
在iOS上最主要的方法就是在访问期间加锁,等访问完毕在解锁。至于加什么锁怎么加锁,网上很多资料讲的都挺详细的。
为情所困2017-04-28 09:07:18
同步
异步
线程同步
,是不同的概念
接楼上同学的例子
你拿一个苹果,然后我拿一个苹果, 这叫同步
执行
你和我同时去拿苹果,这叫两个线程异步
执行,这里为了实现异步
,使用了多线程
的手段,你和我各属于一个线程
然后就会出现问题了,如果你和我伸手拿了同一个苹果怎么办? 这个时候就需要你和我进行线程同步
,比如:谁先看到篮子,就对篮子加锁,让另一个人等着,拿完之后解锁
ringa_lee2017-04-28 09:07:18
很多人觉得异步就是多线程,这个是不对的,异步和多线程有区别的。
线程是代码啊,CPU要跑的代码啊,两段线程代码一起跑给人一种没有阻塞的感觉。但这还是代码。CPU还是在那里等着。
异步主要针对io来说,文件的io,网络请求的io,你不想让同步的io阻塞了进程,所以才有异步方式提高响应能力,异步要去操作系统订阅事件委托闭包函数,和多线程是不能说一样的。
如果你懂一点硬件,你可以感受一下中断。
拿大家说的苹果举个例子……
异步是,你告诉电脑,给我拿个苹果吧。
电脑就让自己会拿苹果的硬件去响应这个功能啦。跟CPU还有关系么?没了啦。就不耽误CPU的事情啦。
苹果是网络请求的时候,拿苹果的就是网卡