多线程并发的原理:同一时间内,cpu只能处理一件事情,多线程并发其实是cpu在多条线程间的调度,快速切换。
多线程的缺点 1——但如果线程过多,来回切换会大量消耗cpu的性能。2——创建线程有开销,在栈区(每条子线程占512K,主线程占1M(程序运行时,默认会开启一条线程,就是主线程)可以使用setStackSize方法来占用内存,必须是4K的倍数) 3——如果开启多条线程会降低程序性能(移动端一般开辟3条) 4——线程过多会使程序的结构更加复杂,例如线程通信
多线程的优点 1——能适当提高程序的执行效率 2——能适当提高资源的利用率
主线程的作用
1— 显示UI界面 2—处理事件
注意:耗时操作别放在主线程,会影响UI界面流畅度,影响用户体验
获得当前线程方法[NSThread currentThread]
-线程安全:多个线程访问同一片区域,就会出现安全问题,也叫作线程同步
需使用@synchronized(需锁住的对象),必须是同一把锁,缺点是要消耗大量的CPU资源
-NSThread
创建方法:
1.[[NSThread alloc] initWithTarget:self selector:@selector(方法名) Object:要传的参数];
2.[NSThread detachNewThreadSelector:@selector(方法名) target:self withObject:nil]
隐式创建
3.[NSThread performSelectorInBackground:@selector(方法名) withObject:nil]
方法:阻塞线程两秒钟
[NSThread sleepForTimeInterVal:2]
[NSThread exit] 直接结束线程
-NSOperationQueue
创建方法
[NSBlockOperation blockOperationWithBlock^{}]
[NSOperationQueue alloc] init
[[NSInvocationOperation alloc] initWithTarget:self selection:@selection() object]
添加线程
addOperationQueueWithBlock:^{
};
回到主线程
[NSOperationQueue mainQueue]
-GCD
伟大的中枢调度器 GCD:主要有以下几种情况
异步:不在一个线程执行
同步:在同一个线程执行
串行:串在一起执行
并行:一起执行
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue,^{
});
这是一个C语言的方法,是平时开发中使用频率比较高的一种多线程创建方式
上面的这种方式属于异步并发,是GCD方法中最常用的一种异步通常用async表示,同步则以sync表示
以上就几种常用的多线程创建方法,和多线程的注意点,多线程是我们开发过程中非常需要注意的一点,所以希望对大家有帮助。下面附上一张图,能帮助你更好的理解。