简述进程和线程的主要区别 进程线程区别

推荐视频
linux服务端的网络并发 , 详细解读网络io与线程进程关系
为什么不推荐做mcu与qt开发 , c++ linux后台服务器开发很香吗?
直播学习地址:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂
【简述进程和线程的主要区别 进程线程区别】1.什么是进程?为什么要有进程?
进程有一个相当精简的解释:进程是对操作系统上正在运行程序的一个抽象 。
这个概念确实挺抽象 , 仔细想想却也挺精准 。
我们平常使用计算机 , 都会在同一时间做许多事 , 比如边看电影 , 边聊天 , 顺便打开浏览器百度搜索一下 , 我们所做的这么多事情背后都是一个个正在运行中的软件程序;这些软件想要运行起来 , 首先在磁盘上需要有各自的程序代码 , 然后将代码加载到内存中 , CPU会去执行这些代码 , 运行中会产生很多数据需要存放 , 也可能需要和网卡、显卡、键盘等外部设备交互 , 这背后其实就涉及到程序对计算机资源的使用 , 存在这么多程序 , 我们当然需要想办法管理程序资源的使用 。并且CPU如果只有一个 , 那么还需要操作系统调度CPU分配给各个程序使用 , 让用户感觉这些程序在同时运行 , 不影响用户体验 。
理所当然 , 操作系统会把每个运行中的程序封装成独立的实体 , 分配各自所需要的资源 , 再根据调度算法切换执行 。这个抽象程序实体就是进程 。
所以很多对进程的官方解释中都会提到:进程是操作系统进行资源分配和调度的一个基本单位 。
2.什么是线程?为什么要有线程?
在早期的操作系统中并没有线程的概念 , 进程是拥有资源和独立运行的最小单位 , 也是程序执行的最小单位 。任务调度采用的是时间片轮转的抢占式调度方式 , 而进程是任务调度的最小单位 , 每个进程有各自独立的内存空间 , 使得各个进程之间内存地址相互隔离 。
后来 , 随着计算机行业的发展 , 程序的功能设计越来越复杂 , 我们的应用中同时发生着多种活动 , 其中某些活动随着时间的推移会被阻塞 , 比如网络请求、读写文件(也就是IO操作) , 我们自然而然地想着能不能把这些应用程序分解成更细粒度、能 准并行运行 多个顺序执行实体 , 并且这些细粒度的执行实体可以共享进程的地址空间 , 也就是可以共享程序代码、数据、内存空间等 , 这样程序设计模型会变得更加简单 。
其实很多计算机世界里的技术演变 , 都是模拟现实世界 。比如我们把一个进程当成一个项目 , 当项目任务变得复杂时 , 自然想着能不能将项目按照业务、产品、工作方向等分成一个个任务模块 , 分派给不同人员各自并行完成 , 再按照某种方式组织起各自的任务成果 , 最终完成项目 。
需要多线程还有一个重要的理由就是:每个进程都有独立的代码和数据空间(程序上下文) , 程序之间的切换会有较大的开销;线程可以看做轻量级的进程 , 同一类线程共享代码和数据空间 , 每个线程都有自己独立的运行栈和程序计数器 , 线程之间切换的开销小 。所以线程的创建、销毁、调度性能远远优于进程 。
在引入多线程模型后 , 进程和线程在程序执行过程中的分工就相当明确了 , 进程负责分配和管理系统资源 , 线程负责CPU调度运算 , 也是CPU切换时间片的最小单位 。对于任何一个进程来讲 , 即便我们没有主动去创建线程 , 进程也是默认有一个主线程的 。