线程、同异步、阻塞

最近容易忘事,面试时也经常忘东西,重新复习一下会突然失忆的东西。

这三个是完全不同的机制,但每次都还是会联系到一块,还是有不少相似之处的。

线程(thread)是一种轻量化的进程,是进程中实现调度和分派的基本单位。进程(process)是资源的拥有者,唯一标志模块为PCB(进程控制块)进程标志号为PID。

线程管理通常有四种操作(c11为例):

1、线程创建thread

2、线程终止return(并不是其他的不行,而是其他方法不调用析构函数)

3、线程等待wait(这种方法会造成锁的释放)

4、线程让权yield(move是转移线程所有权,不是cpu使用权)

PCB模块中经常包含以下部分:

1、进程名PID

2、特征信息 表示是用户进程抑或是系统进程,进程实体是否常驻内存

3、进程状态信息 进程的执行状态,是运行状态、就绪还是阻塞状态

4、调度优先权 进程获取CPU的优先级别,使用竞争算法之类的,通常优先权高的先获得CPU(优先数是越小越先获得CPU

5、通信信息 反应该进程应当与那些进程有什么样的通信关系,比如等待哪个进程的信号等。

6、现场保护区 对应进程由于某种原因放弃使用CPU时,需要将其一部分与运行环境有关的信息保存起来,以便在重新获得CPU后回复正常运行。通常内容有程序计数器、程序状态字各工作寄存器的内容等。

7、资源需求、分配和控制方面的信息 需要或占有的I/O设备、磁盘空间、数据区等

8、进程实体信息 指出该进程的存储情况,在内存或外存的地址、大小等

9、族系关系 反应父子进程的隶属关系

10、其他信息(文件信息、工作单元等)如文件信息、工作单元等

进程控制块可见是进程的最关键部分,也能看出来这样的结构是非常沉重的,因此这是线程是进程调度和分配的基本单位,是轻量化的进程的含义。在整个进程生存周期中,系统都是通过PCB在控制进程的。进程的动态、并发特征也都是通过PCB实现的。

阻塞记得很清楚就不展开了。

同步与异步和阻塞的区别在于:

异步的存在意义在于让CPU暂时搁置一些请求,处理下一个请求,等待资源获取后/请求函数运行完毕后通过“被调用对象”进行通信或利用回调函数进行调用。而阻塞将进程挂起,等待唤醒后才能执行下面的函数,异步并不需要这个过程,阻塞当然可以和异步达到同样的效果,但进行操作过于繁琐且调度价格不菲,逻辑性差。

回调函数写个简单的例子,比如一个模型的读取和绘制,如果你想同时处理一些其他现有物理模拟的话,但这个模型却不能马上调用出来,你可以类似这样写:

OBJ_Write = open(file, WriteOBJ)

上面的函数用函数指针即可,通常typedef后使用。再举个例子来讲,通常用的cmp函数放到sort中就是一种回调函数。后面写接下来要执行的物理模拟即可,当然这并不严谨,具体逻辑还是看你的更新是什么样的,这里举这样的例子是因为有个青蛙跳的物理模拟算法(尽管当时是用同步做的)。可以注意到这并不需要多线程,只是一种并发策略,同时你也可以用并行做,这两个概念其实是不相关的,只是联系紧密。

实践中还是使用多线程进行上面例子的实现,毕竟渲染一张图像价格不菲。但二者都可以提高程序的可响应性,避免线程阻塞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值