我们平时写的程序默认都是由一个main函数进入,到函数执行完毕,那么我们的程序也就结束了。这个过程其实是了一个进程(即应用程序)被读入内存中,直到执行完毕后移除内存的整个过程。不管是从前的单核还是如今的性能越来越好的多核计算机,在一个进程中能够“并发”的执行多个线程都是及其重要的。在单CPU时代,由多个线程来模拟“并发”可以让一些程序执行得更合理,比如说在浏览器中一个线程处理文字,另外一个线程并行的处理图片,从而实现每个线程处理好自己的内容以后显示在浏览器上而不是需要所有内容的处理好一起显示,这让交互变得更加友好,并且显得“速度更快”。
在如今的多CPU时代,利用好并发,学好并发编程,绝对可以让我们的程序运行得更加流畅,用户体验更佳。之前在《Java编程思想》中对并发有了一定的了解,由于目前是开发移动端程序,相对来说并发量较低,对并发编程的能力要求也不是太高,会利用一些基本的并发API、对进程、线程有一个基本的认识也就足矣。但是作为一个“热爱学习、热爱钻研”的程序员来说,并发编程绝对是我们需要深入了解,结合计算机的其他知识来理解的一套思想。最近入手了一本《Java并发编程艺术》,想一边看一边实践并且一边记录下自己学习的内容,以供参考。
我们知道,CPU是一个不断取指执行的运算机器,而每个线程维护了自己的栈信息,当从一个线程切入到另外一个线程执行得时候,CPU需要用一个结构体记录前一个线程的相关信息(变量、方法、返回地址等栈内容),然后再切换到另外一个线程执行,这就是一个上下文切换的过程,而这个过程是需要一定开销的。
看一个例子,在Android中,主线程执行UI相关操作,而所有网络请求都要通过子线程来进行。这造成了一些人