简答题3

本文介绍了同步与异步I/O的区别、#define与typedef的使用、线程调度模型及算法、并发进程与死锁的问题以及内存管理的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.同步IO和异步IO的区别

A. 同步
所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。

按照这个定义,其实绝大多数函数都是同步调用(例如sin isdigit等)。
但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。
最常见的例子就是 SendMessage。
该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。
当对方处理完毕以后,该函数才把消息处理函数所返回的值返回给调用者。


B. 异步
异步的概念和同步相对。
当一个异步过程调用发出后,调用者不会立刻得到结果。
实际处理这个调用的部件是在调用发出后,
通过状态、通知来通知调用者,或通过回调函数处理这个调用。

以 Socket为例,
当一个客户端通过调用 Connect函数发出一个连接请求后,调用者线程不用等待结果,可立刻继续向下运行。
当连接真正建立起来以后,socket底层会发送一个消息通知该对象。

2.#define和typedef
#define是在预处理时做一个简单的字符替换
typedef是在正式编译时定义已经存在的数据类型的同义字,编译器会做类型检查

3.关于线程调度
    所谓多线程的并发运行,其实是指从宏观上看,各个线程轮流获得CPU的使用权,分别执行各自的任务.在运行池中,会有多个处于就绪状态的线程在等待CPU,Java虚拟机的一项任务就是负责线程的调度,线程调度是指按照特定机制为多个线程分配CPU的使用权。
调度模型
    线程有两种调度模型:分时调度模型和抢占式调度模型。
    分时调度模型是指让所有的线程轮流获得cpu的使用权,并且平均分配每个线程占用的CPU的时间片这个也比较好理解。虚拟机采用抢占式调度模型,是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中的线程优先级相同,那么就随机选择一个线程,使其占用CPU。处于运行状态的线程会一直运行,直至它不得不放弃CPU。一个线程会因为以下原因而放弃CPU。
    一, 虚拟机让当前线程暂时放弃CPU,转到就绪状态,使其它线程或者运行机会。二,当前线程因为某些原因而进入阻塞状态。三,线程结束运行。
    需要注意的是,线程的调度不是跨平台的,它 不仅仅取决于虚拟机,还依赖于操作系统。在某些操作系统中,只要运行中的线程没有遇到阻塞,就不会放弃CPU;在某些操作系统中,即使线程没有遇到阻塞,也会运行一段时间后放弃CPU,给其它线程运行的机会。
    虚拟机的线程调度是不分时的,同时启动多个线程后,不能保证各个线程轮流获得均等的CPU时间片。如果希望明确地让一个线程给另外一个线程运行的机会,可以采取以下办法之一。
    调整各个线程的优先级,让处于运行状态的线程调用Thread.sleep()方法,让处于运行状态的线程调用Thread.yield()方法,让处于运行状态的线程调用另一个线程的join()方法。
调度算法
常用的进程调度算法有:
1、先来先服务和短作业(进程)优先调度算法
(1)先来先服务调度算法(FCFS)
(2)短作业(进程)优先调度算法
2.高优先权优先调度算法
(1)非抢占式优先级算法
(2)抢占式优先级调度算法
3.基于时间片的轮转调度算法

4.并发进程和死锁
3个进程要想不死锁 每个进程都需要4个同类资源 所以

只要每个进程都有3个资源 另外一个在给一个额外的资源。 
那么3个进程中有一个可以运行
 运行完以后释放资源
 然后其余的进程再申请资源就可以了

并发是指宏观上并行,其实不是并行,多进程其实是将所有进程按时间分为一个一个的时间片,每一个时刻只执行该运行的片,时间片过期后转而执行下一个进程的时间片。

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
A: 123
B: 456
A需要4,B需要3,谁都不释放,就产生了死锁

·死锁的定义: 
如果一组进程中的每一个进程都在等待仅有该组进程中的其他进程才能引发的事件,那么该组进程是死锁的。

·产生死锁的原因: 
资源竞争。
进程推进顺序不当。
·产生死锁的必要条件: 4点
互斥条件。
请求和保持。
不可抢占。
循环等待条件。
·处理死锁的方法: 
预防死锁:设置某些限制条件去破坏产生死锁的四个必要条件中的一个或几个来预防产生死锁。

1.破坏请求和保持条件:比较现实
2.破坏不可抢占条件:会延长进程的周转时间,增加了系统开销,降低了系统吞吐量。
3.破坏循环等待条件:对所有资源类型进行线性排序。

避免死锁:同样是事先预防策略,在资源动态分配的过程中,用某种方法防止系统进入不安全状态。从而避免死锁。
检测死锁:允许进程在运行过程中发生死锁,然后检测死锁。
解除死锁:当检测到死锁的时候,采取相应措施,将进程从死锁状态中解脱出来。

·死锁的检测 
资源分配图
死锁定理:在资源分布图中,找出一个既不阻塞由非独立的进程节点让其运行。最终S为死锁的充分条件是:当且仅当S状态的资源分配图是不可完全简化的。
·死锁解除 
抢占资源。
终止进程。


5.关于内存
1)内存的存取速度应与cpu速度相匹配,若内存的存取速度低于cpu速度,则cpu需花费大量时间从内存中读取数据,虽不会造成数据丢失,但也会影响运行效率。
(内存和cpu的关系:CPU是负责运算和处理的, 内存是交换数据的。
程序或者 操作者对CPU发出 指令,这些指令和数据暂存在内存里,在CPU空闲时传送给CPU,CPU处理后把结果输出到 输出设备上,输出设备就是 显示器打印机等。在没有显示完之前,这些数据也保存在内存里,如果内存不足,那么系统自动从 硬盘上划分一部分 空间作为 虚拟内存来用。但写入和读取的速度 跟物理内存差的很远很远,所以,在内存不足的时候,会感到机器反应很慢,硬盘一直在响。)
2)什么是虚拟内存
虚拟内存别称虚拟存储器(Virtual Memory)。电脑中所运行的程序均需经由 内存执行,若执行的程序占用内存很大或很多,则会导致内存消耗殆尽。为解决该问题,Windows中运用了虚拟 内存技术,即匀出一部分硬盘空间来充当内存使用。当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。若计算机运行程序或操作所需的随机存储器(RAM)不足时,则 Windows 会用虚拟存储器进行补偿。它将计算机的RAM和 硬盘上的临时空间组合。当RAM运行速率缓慢时,它便将数据从RAM移动到称为"分页文件"的空间中。将数据移入分页文件可释放RAM,以便完成工作。 一般而言,计算机的RAM 容量越大,程序运行得越快。若计算机的速率由于RAM可用空间匮乏而减缓,则可尝试通过增加虚拟内存来进行补偿。但是,计算机从RAM读取数据的速率要比从硬盘读取数据的速率快,因而扩增RAM 容量(可加 内存条)是最佳选择。
3)程序在代码被调入后就可以运行,数据只在需要时进入内存即可
4)计算机的容量即地址总线的寻址的字节数,数据总线是一个数据的位数。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值