最近在xmake中,用lua的协程实现了多任务编译,效果还是不错的,不过后来发现一个问题:
如果所有编译进程都在处理编译,没有退出的时候,xmake的lua主进程会不断地在这些任务间,不停的切换轮询进程的状态,但是有没有机会执行其他任务,导致cpu过高,抢占了编译进程的cpu时间。。
那如果在等不到完成的进程时候,加入sleep等待呢,又会导致编译速度变慢,没法合理利用cpu。。
因此,为了解决这个问题,我打算扩展下lua的接口,实现了一个跨平台的多进程等待接口: process.waitlist 实现多个未完成进程的同时等待,让出xmake主进程的cpu时间,给其他编译进程充分利用
xmake中的lua代码如下:
```
继续阅读 »
新特性
增加同时等待多个进程接口
增加uuid生成器
增加hash库模块
添加__tb_deprecated__关键字以及配置选项
改进
移动部分utils接口到hash模块
重写random生成器
Bugs修复
修复stdout在vs2015以上版本的兼容性问题
修复进程参数长度限制
继续阅读 »
一.实验名称:银行家算法
二.实验目的:
银行家算法是避免死锁的一种重要方法,通过编写 一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。
三.实验原理说明:
银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。
银行家算法是由操作系统执行,每当一个进程请求资源。算法由拒绝或延期的请求,如果它确定接受该请求可以把系统处于不安全状态(即一个可能发生死锁)来避免死锁。当一个新进程进入一个系统,它必须声明它可能曾经声称每
继续阅读 »
同步IO
Linux IO的两阶段
同步, 异步, 阻塞, 非阻塞, 是网络IO中经常被提到的概念, 刚接触Tornado服务器的时候也知道Tornado是异步非阻塞的高性能web服务器, 直到最近看了一些资料才对同步异步的概念有了一些自己的想法。
HTTP协议是构建在TCP协议上的, TCP通信的底层本质上是socket的IO, 在Linux上, 以读socket为例, 数据首先到达的是内核缓冲区, 其次才会从内核缓冲区拷贝到用户进程, 所以负责通信的进程去读写socket的时候(也即recvfrom调用), 一般是两个阶段:
等待数据准备好, 此时数据暂存在内核缓冲区
数据准备好, 从内核缓冲区拷贝到用户进程
以上的两阶
继续阅读 »