多线程

2016-10-24  本文已影响283人  学而不思则罔思而不学则殆

进程

内存中运行的一个应用程序. 比如电脑打开的 QQ.

特点:

线程

进程中的一个执行流程, 一个进程中可以有多个流程. 比如 QQ 中边聊天边下载.

状态

流程图

GCD

队列:
dispatch_queue_t q = dispatch_queue_create(“....”, dispatch_queue_serial);
dispatch_queue_t q = dispatch_queue_create("......", dispatch_queue_concurrent);
dispatch_queue_t q = dispatch_get_global_queue(dispatch_queue_priority_default, 0);
dispatch_queue_t q = dispatch_get_main_queue();
同步异步
操作
队列和线程的区别:

队列: 队列是管理线程的, 相当于线程池, 能管理线程什么时候执行.

主线程队列和 GCD 创建的队列也是有区别的

主线程队列和gcd创建的队列是不同的。在gcd中创建的队列优先级没有主队列高,所以在gcd中的串行队列开启同步任务里面没有嵌套任务是不会阻塞主线程,只有一种可能导致死锁,就是串行队列里,嵌套开启任务,有可能会导致死锁。
主线程队列中不能开启同步,会阻塞主线程。只能开启异步任务,开启异步任务也不会开启新的线程,只是降低异步任务的优先级,让cpu空闲的时候才去调用。而同步任务,会抢占主线程的资源,会造成死锁。

在主队列开启同步任务,为什么会阻塞线程

在主队列开启同步任务, 因为主队列是串行队列, 里面的线程是有顺序的, 先执行完一个线程再执行下一个线程, 主线程是不会执行完毕的, 因为他是无限循环的, 除非关闭应用程序. 因此主线程开启一个同步任务, 同步任务会想抢占执行的资源, 二主线程一直执行某些操作不肯放手. 俩个的优先级都很高, 最终导致死锁.

上一篇 下一篇

猜你喜欢

热点阅读