洞察探索open banking如何通过小程序容器技术助力金融企业实现数据安全和数字化转型
893
2022-10-13
EA&UML日拱一卒-多任务编程超入门-(2)进程和线程
作为多任务编程的基本概念,进程和线程的概念是无论如何回避不了的。很多公司面试时也会问倒二者的区别。如果到互联网上随便搜一下,就能找到关于进程和线程的文章,但是相信读过之后,懂得人会点头,不懂的还是不懂。所以本文采用另外一种方式来说明。
单任务系统的情况
在这种情况下,所有的系统资源都交给程序使用,编程者只需要考虑处理的流程和逻辑即可。这里的资源包括:CPU时间,内存(堆,栈),全局变量,硬件设备(显示器,键盘,通讯接口,音频设备)等。
多任务操作系统的情况
进程
对于编程者来说,最理想的情况就是,根本不用意识自己是多任务操作系统环境中编写程序。
也就是说,至少看起来所有的系统资源都交给程序使用,编程者只需要考虑处理的流程和逻辑即可。这里的资源包括:CPU时间, 内存(堆,栈,全局变量),硬件设备(显示器,键盘,通讯接口,音频设备)等。
但问题是,物理内存,设备只有一份,多个程序同时执行时必然发生竞争。这个问题当然不用我们考虑,因为多任务操作系统已经解决了:
为每个程序提供一定的CPU时间,保证程序可以按照某种间隔被执行。这种执行是二进制机器码层面的。为每个程序提供了独立的,虚拟的内存空间,程序对虚拟内存进行的操作会映射到实际的物理内存上。对于显示部分,提供了窗口机制,将程序的输出导向特定的窗口。同时系统将键盘,鼠标的输出导向当前活动的窗口。有一些硬件,比如音频输入设备,串口等实在无法在程序之间共享。这样的硬件就采用了独占的方式,如果某个程序占用了某个设备,其他程序就不能使用。
这些都做到以后,可以说基本上实现了我们的理想:编程者不用意识自己是在为多任务操作系统编写程序。每个任务作为单独的程序来设计和实现,任务之间的调度利用操作系统的功能来实现。
这样的程序执行过程就是进程。基本上进程就相当于多任务操作系统中的应用程序。(许多规模较大的应用也可以包含多个进程)
进程的好处是最大限度保持程序执行过程之间的独立性,使增加任务或者调整任务内容变得简单。但同时也可以看到操作系统要为每个进程分配资源,映射内存操作,控制各种输入输出。所有这些都需要相当的系统开销。所以多任务操作系统也是随着硬件性能的提高而逐渐发展起来的。
线程
理解了进程的优缺点以后,再理解线程就容易了。很多时候在一个进程内部还是需要多任务处理,比如视频时软件在视频解码时还要接受用户操作。对于这种情况下就需要在进程内部提供多任务处理机制:线程。
线程之间CPU时间的分配和进程类似,但是共同使用进程的资源,操作系统不必为每个线程提供另外的映射机制,这样做的结果:
多个线程共用一个资源时,需要编程者利用操作系统提供的接口主动的进行访问控制和同步。由于使用共同的内存空间,堆,栈等,所以不需要另外的地址映射等处理,可以实现比较快速的数据交换。
总结
就好像没法回答夏天和冬天那个更好一样,也没有办法回答进程和线程那个更好,我们应该做的就是在适当的场合使用适当的技术。
写在文章的最后
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~