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