当前位置:网站首页>进程与线程
进程与线程
2022-08-02 17:57:00 【liebecl】
进程与线程概述
不管是基于windows,linux还是其他平台,或者C还是java等编程语言,都会最后得到运行的程序,都会使用到进程与线程。
程序是一种静态概念,是保存在磁盘上的一系列文件。
进程是一种动态概念,是运行中的程序,是资源分配的最小单元,一个程序包括一个或多个进程。
线程是CPU运算调度的最小单元,也可以当做轻量级的进程,一个进程可以包含一个或者多个线程。
进程
进程概述
多进程是指操作系统能同时运行多个任务(程序)。
每个进程都有独立的代码和数据空间(进程上下文)。
进程间通信
管道(pipe)及有名管道(named pipe):管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
信号(signal):信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一致的。
消息队列(message queue):消息队列是消息的链接表,它克服了上两种通信方式中信号量有限的缺点,具有写权限得进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息。
共享内存(shared memory):可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。
信号量(semaphore):主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段。
套接字(socket):这是一种更为一般得进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。
线程
多线程是指在同一程序中有多个顺序流在执行。
线程与进程的关系和区别
火车类比
引用知乎作者:biaodianfu
进程=火车,线程=车厢
线程在进程下行进(单纯的车厢无法运行)。
一个进程可以包含多个线程(一辆火车可以有多个车厢)。
不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)。
同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)。
进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)。
进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)。
进程可以拓展到多机,进程最多适合多核(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上)。
进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-“互斥锁”。
进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-“信号量”。
过程
进程和线程都会经历:创建,就绪,运行,阻塞和终止。
数据组成
各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。一个标准的线程由线程ID,当前指令指针PC,寄存器和堆栈组成。而进程由内存空间(代码,数据,进程空间,打开的文件)和一个或多个线程组成。
————
2022/07/29
家中
边栏推荐
- Security First: Tools You Need to Know to Implement DevSecOps Best Practices
- 深入理解IO流(第一篇)
- MySQL基本语法
- KunlunBase 1.0 is released!
- 我的递归从不爆栈
- Local broadcast MSE fragments mp4 service
- LiveGBS国标GB/T28181流媒体平台支持主子码流切换主码流stream/streamprofile
- 注释
- NeRF: The Secret of 3D Reconstruction Technology in the Popular Scientific Research Circle
- 编译型语言与解释型语言的区别
猜你喜欢
随机推荐
面试官:可以谈谈乐观锁和悲观锁吗
How to deal with security risks posed by machine identities
洛谷P4799 世界冰球锦标赛
注释
Remember the stuck analysis of an industrial automation control system in .NET
Gear 月度更新|6 月
How Tencent architects explained: The principle of Redis high-performance communication (essential version)
Enterprise cloud cost control, are you really doing it right?
sed 命令
洛谷P5094 MooFest G 加强版
golang刷leetcode 字符串(4)逆波兰式
Endanger the safety of common Internet attacks have?
发挥云网融合优势,天翼云为政企铺设数字化转型跑道
电子行业库存管理痛点与WMS仓储管理系统解决方案
LeetCode 1947. 最大兼容性评分和(状态枚举DP)
Go 语言快速入门指南: 介绍及安装
IReport常见问题及处理方法
golang源码分析(19)简单编译器-计算器
一文看懂推荐系统:概要01:推荐系统的基本概念
KunlunBase 1.0 发布了!