理论性的东西就不扯太多了,具体理论直接百度就可以了解了,这里我用例子来说明!
对于操作系统来说Linux、UNIX大家都知道是多用户多进程的操作系统,比如说浏览器对于它来说就是进程,有可能是一个或两个,因为还有守护进程等等一些 一个以上的进程把可以这么理解。
在单CPU的系统中使用Google Chrome的情况下使用另外一个进程,比如IDEA,在点击切换的时候是否感觉非常流畅,它怎么做到的呢?答案很简单就是:
定时去轮询这个进程,就是CUP要把执行权交给哪个进程去执行
。线程可以理解为密度更细的进程吧,线程和进程区别比较大。
也可以把线程理解为相对独立的盒子:
它们之间一般是不能共享数据的,当然通过共享内存的方式 还是可以共享数据的。
那线程就是在进程里面密度更细的一些,它也是要求有CPU调用的,也要发送CPU指令,一个进程起来之后有一个较大的堆和栈,栈对于线程来说是唯一的,独一份。里面的东西就可以去读栈和堆的数据,当然这个进程呢,会对栈和堆进行密度更细的划分为线程,每个线程都有它自己的一块栈,访问的是共同的堆,不过总体来说还是属于这个进程的栈和堆,所以说共享数据就比较容易了,但是有个问题,就是数据安全性的操作,比如有没有导致死锁,我把1修改为2,别人读出来是3呢,这就是多线程一个比较头疼的一些地方。在进程里面的东西细分出来就叫线程。
线程其实就是在进程里面可以同时运行多个看起来是独立的程序单元,它包含在进程里面,各个线程之间是独立的。
比如说有个程序在读数据库的时候可以不阻塞的去写一个文件、在抓取网页数据(HTTP)的时候,可以另外再发起一个类似TCP的请求。同时做这些事情,可以把它理解为线程。
对于现在来说,我们已经有多核CPU了,以前的并发可能就变成了并行,也就是说一个CUP执行一个线程,比如我有8核CPU,那我就8换个线程去跑,可能真的就出现并行的情况了,就不说并发,并发就是说程序同时运行多少个,但是它还有要有程序的上下切换的,就像开头说的,打开一个程序操作的时候,又打开另外一个,对于操作系统来说一个CPU的话,它要来回切换两个进程,但是对线程来说,好几个线程来回的去切换就起到一个让你看起来像并发的东西。
简单的介绍就是这些了,至于它详细的一些信息啊,大家可以去看网上的一些资料。