操作系统概念

5.1 进程、线程

线程

线程与进程比较

进程是资源分配的单位,线程是CPU调度的单位
进程拥有一个完整的资源平台,线程只独享必不可少的资源,如寄存器和栈
线程同样有就绪、阻塞、执行三种基本状态,同样有状态之间的转换关系
线程能减少并发执行的时间和空间开销

5.2 进程间有哪些通信方式

管道

linux命令中|就是管道

$ ps auxf | grep mysql

将前一个命令的输出,作为后一个命令的输入
可见是单向传输的
上面是匿名管道
命名管道需要通过mkfifo命令定义

$ mkfifo myPipe

管道通信效率低,不适合频繁交换数据

消息队列

是保存在内容中的消息链表
类似发邮件
但是通信不及时,附件大小有限制
不适合比较大数据的传输
通信过程中,存在用户态和内核态的数据拷贝开销

共享内存

拿出一块虚拟地址空间,映射到相同的物理内存中

信号量

实现进程间的互斥与同步
有p,v操作
p是进入共享资源之前
v是离开共享资源之后
互斥初始化为1
同步初始化为0

信号

异常情况下的工作模式
唯一的异步通信机制
进程对信号的处理方式:
1.执行默认操作
2.捕捉信号
3.忽略信号

Socket

跨网络与不同主机上的进程通信

5.3 多线程冲突怎么办

互斥与同步的实现和使用

使用加锁和解锁解决并发线程/进程的互斥问题
任何进入临界区的线程都要加锁
加锁成功则进入,访问后解锁
忙等待锁,也称自旋锁,获取不到锁就一直忙等
无等待锁不用自旋

信号量

5.4 怎么避免死锁

死锁概念

死锁条件:
1.互斥
2.持有并等待
3.不可剥夺
4.环路等待

避免死锁问题的发生

资源有序分配法
线程都得按照相同的顺序申请自己想要的资源

5.5 乐观锁、悲观锁

互斥、自旋、读写都是悲观锁
悲观锁访问资源前要上锁
乐观锁先修改资源,再验证有无冲突,全程没有加锁,也叫无锁编程

5.7 线程崩溃了,进程也会吗

线程崩溃,进程一定会崩溃吗

如果是因为非法访问内存,则会,因为各个线程地址空间是共享的

为什么线程崩溃不会导致JVM进程崩溃

JVM定义了自己的信号处理函数,拦截了SIGSEGV信号,针对这两者不让他们崩溃

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值