一个进程必须要有一条线程,多个任务一个线程处理叫做串行,多个任务多个线程处理叫做并行,看似并行,其实原则上还是在按顺序运行,只是中间CPU调度的时间非常短,才会认为是在并行。
多线程的优缺点
优点:能适当提高程序的执行效率,能适当的提高资源利用率(CPU、内存利用率)
缺点:1、创建线程是需要开销的,iOS下的主要成本包括:内核数据结构(大约1KB)、栈空间(子线程512KB,主线程1MB),创建线程需要大约90毫秒的时间。2、开启大量的线程会降低程序的性能。3、线程越多,CPU在调度线程上的开销越大。4、程序设计更加复杂(处理线程之间的通讯)。
线程注意:耗时的操作不能放在主线程。会卡住主线程,最轻微的会影响用户体验。
多线程实现方案:
pthread:通用的多线程API,C语言,线程生命周期由程序员手动管理。
NSThread:创建线程需要程序员管理其生命周期,OC语言
GCD:C语言,充分利用多核机制。自动管理生命周期。
NSOperation:OC,基于GCD,自动管理生命周期。
详细:
NSThread:创建与启动:直接alloc 然后start就OK
或者detachNewThread也行
隐式创建:performSelectorInBackground:
让线程进入睡眠状态:SleepForInterval:2;
让线程睡眠至指定时间:sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:2];
线程安全:互斥锁:在A线程操作文件1之前,A先将文件1锁起来,等A操作完解锁之后,B再去操作文件1.
互斥锁:@synchronized(self)因为self是唯一对象
互斥锁的优缺点:能有效的防止多线程抢夺资源造成的数据安全问题。但是用互斥锁会消耗大量的CPU性能。