安徽省住房城乡建设厅网站电工网络营销方案设计
进程与线程区别
1.进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)
2.进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程小很多,创建也是。
3.线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式进行。
4.但是多进程程序健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另一个进程造成影响,因为进程有自己独立的地址空间。
死锁产生条件和解决办法
产生条件
1.互斥条件:一个资源每次只能被一个进程使用
2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放
3.不剥夺:进程已获得的资源,在未使用完之前,不能强行剥夺
4.循环等待条件
解决办法
1.如果不同程序会并发存取多个表,尽量约定以相同顺序访问表
2.在同一个事务中,尽可能左到一次锁定所需要的所有资源,减少死锁产生概率
3.如果业务处理不好,可以用分布式事务锁或乐观锁
物理地址和逻辑地址
逻辑地址
逻辑地址是CPU分配给每个进程的地址,逻辑(虚拟)地址和它的实际所处位置是不一样的,这是共享内存时所必需的。逻辑地址通过MMU(内存管理单元)转换为物理地址。
物理地址
内存空间所在的实际内存地址,由CPU生成。
多进程、多线程区别
数据共享、同步
多进程共享复杂,同步简单;多线程共享简单,同步复杂
内存、CPU
多进程占用内存多,切换复杂,CPU利用率低;多线程相反
创建销毁、切换
多进程创建销毁、切换复杂,速度慢;多线程相反
编程调试
多进程编程简单,调试简单;多线程相反
可靠性
进程间相互不影响;一个线程挂掉,整个线程挂掉
分布式
多进程适应于多核、多机分布;多线程适应于多核分布
进程间通信方式
管道
数据单向传输。
1.匿名管道。用完销毁。通信范围是存在父子关系的进程
2.命名管道。FIFO。不相关的进程间也能通信
缺点:效率低,不适合频繁交换数据
消息队列
像发邮件一样,你发一封,我回一封,可以频繁沟通
缺点:
1.通信不及时
2.附件有大小限制
3.存在用户态和内核态之间的数据拷贝开销
共享内存
一块虚拟地址空间映射到相同的物理内存中。这个进程写入的东西,另一个进程马上就能看到,不需要拷贝传输,提高了通信速度
信号量
实现进程间的互斥与同步。
两种操作:
1.P,信号量-1,信号量<0,表示资源被占用,需等待;>0,可以执行
2.V,信号量+1,信号量<=0,表示有阻塞中的进程,唤醒运行;>0,没有阻塞中的进程。
两个操作必须成对出现。
信号量初始为1,代表互斥;初始为0,代表同步,比如说保证进程A在进程B之前执行
信号
适用于异常情况下的工作模式。
Linux提供了几十种信号,通过kill -l可以查看所有信号
信号是进程间通信机制中唯一的异步通信机制,发送信号后有如下操作:
1.执行默认操作。
2.捕捉信号。为信号定义一个信号处理函数
3.忽略信号。不希望处理某些信号,就忽略
Socket
跨网络与不同主机上的进程通信。
三种常见通信方式:
1.基于TCP协议的通信方式
2.基于UDP协议的通信方式
3.本地进程间通信
线程之间共享哪些内容
堆,全局变量,静态变量,文件等公用资源。
独享:栈,寄存器