当前位置:网站首页>EA&UML日拱一卒-多任务编程超入门-(2)进程和线程
EA&UML日拱一卒-多任务编程超入门-(2)进程和线程
2022-07-29 23:41:00 【51CTO】
作为多任务编程的基本概念,进程和线程的概念是无论如何回避不了的。很多公司面试时也会问倒二者的区别。如果到互联网上随便搜一下,就能找到关于进程和线程的文章,但是相信读过之后,懂得人会点头,不懂的还是不懂。所以本文采用另外一种方式来说明。
单任务系统的情况
在这种情况下,所有的系统资源都交给程序使用,编程者只需要考虑处理的流程和逻辑即可。这里的资源包括:CPU时间,内存(堆,栈),全局变量,硬件设备(显示器,键盘,通讯接口,音频设备)等。
多任务操作系统的情况
进程
对于编程者来说,最理想的情况就是,根本不用意识自己是多任务操作系统环境中编写程序。
也就是说,至少看起来所有的系统资源都交给程序使用,编程者只需要考虑处理的流程和逻辑即可。这里的资源包括:CPU时间, 内存(堆,栈,全局变量),硬件设备(显示器,键盘,通讯接口,音频设备)等。
但问题是,物理内存,设备只有一份,多个程序同时执行时必然发生竞争。这个问题当然不用我们考虑,因为多任务操作系统已经解决了:
- 为每个程序提供一定的CPU时间,保证程序可以按照某种间隔被执行。这种执行是二进制机器码层面的。
- 为每个程序提供了独立的,虚拟的内存空间,程序对虚拟内存进行的操作会映射到实际的物理内存上。
- 对于显示部分,提供了窗口机制,将程序的输出导向特定的窗口。同时系统将键盘,鼠标的输出导向当前活动的窗口。
- 有一些硬件,比如音频输入设备,串口等实在无法在程序之间共享。这样的硬件就采用了独占的方式,如果某个程序占用了某个设备,其他程序就不能使用。
这些都做到以后,可以说基本上实现了我们的理想:编程者不用意识自己是在为多任务操作系统编写程序。每个任务作为单独的程序来设计和实现,任务之间的调度利用操作系统的功能来实现。
这样的程序执行过程就是进程。基本上进程就相当于多任务操作系统中的应用程序。(许多规模较大的应用也可以包含多个进程)
进程的好处是最大限度保持程序执行过程之间的独立性,使增加任务或者调整任务内容变得简单。但同时也可以看到操作系统要为每个进程分配资源,映射内存操作,控制各种输入输出。所有这些都需要相当的系统开销。所以多任务操作系统也是随着硬件性能的提高而逐渐发展起来的。
线程
理解了进程的优缺点以后,再理解线程就容易了。很多时候在一个进程内部还是需要多任务处理,比如视频时软件在视频解码时还要接受用户操作。对于这种情况下就需要在进程内部提供多任务处理机制:线程。
线程之间CPU时间的分配和进程类似,但是共同使用进程的资源,操作系统不必为每个线程提供另外的映射机制,这样做的结果:
- 多个线程共用一个资源时,需要编程者利用操作系统提供的接口主动的进行访问控制和同步。
- 由于使用共同的内存空间,堆,栈等,所以不需要另外的地址映射等处理,可以实现比较快速的数据交换。
总结
就好像没法回答夏天和冬天那个更好一样,也没有办法回答进程和线程那个更好,我们应该做的就是在适当的场合使用适当的技术。
写在文章的最后
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

边栏推荐
猜你喜欢

读书笔记:《这才是心理学:看穿伪心理学的本质(第10版)》

Analysis of miscellaneous diseases such as DNS domain name hijacking in instant messaging mobile terminal development

多商户商城系统功能拆解18讲-平台端商家售后

Farmers on the assembly line: I grow vegetables in a factory

BEVDetNet:Bird‘s Eye View LiDAR Point Cloud based Real-time 3D Object Detection for Autonomous Drivi

Foxmail是什么邮箱?

桌面软件开发框架大赏

Mysql8.0新特性之详细版本

mysql使用on duplicate key update批量更新数据
![CesiumJS 2022^ 源码解读[0] - 文章目录与源码工程结构](/img/6a/0a446eb00fb73275897cbfb336e0b0.png)
CesiumJS 2022^ 源码解读[0] - 文章目录与源码工程结构
随机推荐
devops学习(九) Helm工具--持续部署
go语言(函数、闭包、defer、panic/recover,递归,结构体,json序列化与反序列化)
JVM初探- 内存分配、GC原理与垃圾收集器
JetsonNano learning (5) JetsonNano installs PyTorch and Torchvision
idea设置自动去除未引用(不再引用)的引用
devops学习(五) Jenkins 简单完成持续部署
暴力递归到动态规划 04 (数字字符串转化)
Why does LabVIEW freeze when saving a VI
C语言初阶-初识C语言
【openlayers】Map【1】
Foxmail是什么邮箱?
Elephant Swap:借助ePLATO提供加密市场的套利空间
EA&UML日拱一卒-状态图::重画按钮状态图
全国双非院校考研信息汇总整理 Part.1
Allure环境部署与生成+Allure内容增强
In 2022, the latest Gansu construction staff (material staff) mock exam questions and answers
Guidelines for the Release of New WeChat Mini Programs
C陷阱与缺陷 第4章 链接 4.2 声明与定义
Design for failure 12 common design ideas
全国双非院校考研信息汇总整理 Part.6