来源:python中国网 时间:2019-06-04

  进程和线程是操作系统的概念,要想理解进程与线程,就必须站在人类设计CPU设计操作系统的层面上。计算机运行就是数据从磁盘载入内存,CPU从内存读取数据然后一顿运算。如果计算机永远只有一条指令那么这样运转也没事。

  问题就是现在计算机都是多任务的,比如你一遍下载苍老师的视频一边放着MP3同时还在QQ聊天。也就是说有很多不同功能的指令需要执行,那么他们之间该怎么协调呢?

  先干一个再干一个,听了一天的歌后片还没下下来岂不是很着急?如果一个程序需要在磁盘读取很文件,而另一个程序只是计算两数相加,磁盘寻址的时间相对CPU来说是很长的,这段时间CPU没事干难道就等着去磁盘数据拿回来吗?这明显不科学,人类不会这么蠢的,人类会让她切换到别的程序执行。所以操作系统就能抽象出进程的概念去管理,不同功能的程序是不同的进程,分配不同的内存空间。进程是一种管理很多程序的思想,只是一种叫法而已!一个程序可能会进行很多操作,慢慢从进程中又延伸出线程的概念。

  那么,这个切换的过程该如何控制呢?这就涉及到操作系统对程序的调度。当我们开机的那一刻操作系统的代码就运行起来了,我们后续所有的操作都是在操作系统的界面上进行的,所以你在双击QQ的时候操作系统是知道你要运行qq的,你在打开文件的时候系统是知道你要打开文件的,也就是说你运行哪些程序操作系统是心里有数的!所以各种程序运行起来后由操作系统负责调度运行。

  其实这中间还有个CPU时间片的概念,为了体现公平公正的原则,每个程序可以交替执行,也就是说下载种子视频,播放音乐,QQ聊天来回切换,由于切换的时间非常短,人类是感受不出来的,于是就觉得是很多任务在同时执行。一个系统中所有的进程被分配到的时间片长短并不是相等的,因为操作系统的调度算法是很复杂的,比较出名的有银行家算法!

  无论是python还是php还是java等都可以实现多进程、多线程编程!具体到某个编程语言中,只要找到对应的模块,用该模块把一个函数做成线程或者进程使之一起运行起来就算是多进程、多线程编程了!至于锁、进程通信等都是延伸出来的概念,懂了基本的东西这些都好理解。