在原来的并发编程思想中,要实现多任务共同进行,可以共同进行的任务数量是取决于CPU的时钟速率的。但是随着计算机硬件技术的发展,由于如散热等一些硬件物理上的限制,提升CPU时钟速率已经到达一定的瓶颈了。所以现在处理器制造商一直在寻求其他能够提高处理器运行效能的方式。而主流处理器制造企业已经找到了一个更好的解决方案,那就是增加处理器内核的数量。通过增加处理器内核数量,并发编程中的多任务就可以通过合理的算法分配给不同的处理器内核,实现更高效率的“分工合作”。而这是苹果从硬件角度,同时也是并发编程的根源开始谈的。
硬件上的铺垫已经够牛逼了之后,现在就要考虑如何改进软件上的设计来提高并发编程的效率。而对比原来的并发编程,如Java, C++等的解决方案都是要求软件开发者自己管理线程和任务的关系,即自己安排什么方法、什么函数作为哪个线程的任务进行添加,同时要安排什么时候执行线程,什么时候暂停或销毁线程。这样做的好处是开发者可以自由管理分配线程,而坏处是不合理的使用可能会导致程序运行效率降低。对于iOS开发者来说,由于iOS设备是多核处理器的,开发者无法获知哪个内核正在运行哪些线程,而哪个内核正处于空闲等等,因而无法合理地把多线程和多内核充分匹配起来,则无法发挥出多核处理器应有的效率。
软件上铺垫做的差不多了,是时候推出苹果认为可以合理解决上述软硬件问题的解决方案了,那就是GCD。GCD把线程的管理封装到底层,把队列和同步异步函数暴露给开发者,开发者只需要:使用block管理好自己要做的任务、创建并添加到对应类型的新队列中,并告诉队列以什么方式派发任务(序列化:前一个任务执行完成后才派发下一个任务,期间可能有间隙时间也可能没有;并发:尽可能快地派发任务,不考虑前一个任务是否执行完);同时决定好新队列和当前队列的关系(同步:新队列的所有任务全部执行完毕后再返回到当前队列接着执行当前队列的任务;异步:创建并添加任务到新队列后不等待新队列的任务执行完毕就返回),即可撒手不管了,iOS系统会在底层为开发者处理好各个队列和任务的关系,合理计算决定哪个任务应该由哪个内核来处理完成。
网友评论