专栏中心

EEPW首页 > 专栏 > QNX分布式小测试

QNX分布式小测试

发布人:xinjinlong 时间:2011-05-12 来源:工程师 发布文章
这两天研究了一下QNX的分布式性能,测试例子就是计算圆周率,为了好计算,就是使用了BBP算了,下面是我编码过程中遇到的一个问题,总结一下也算是经验,不管是不是你用分布式或许可以用上:

my_sem = sem_open(sem, O_EXCL);//充当互斥作用,多台机子
my_data = sem_open(data, O_EXCL);//充当全局变量,本来想用share memory,但是share memory只能对单机可以,多机无法map到

int n = 2;

//第一次代码

while( 1 )
{
sem_wait(my_sem);//加锁
sem_getval(my_data, &n);//得到全局值
sem_wait(my_data);//充当--操作
sem_post(my_sem);//解锁
Output(n);//计算函数
if( n - 1 < 0 )
{
break;
}
}

有些机子计算进程无法退出,一台机子算完了,另外一台机子还在跑,ps一下该进程还在,只有手工kill了
原因就是所粒度大,而且存在网络延时,有可能就挂在sem_wait()在了,还没有post就有wait了
还有就是sem_wait(my_data)没有办法才这样,他本来就有阻塞功能,如果只是0就挂了

//第二次代码

while( 1 )
{
sem_getval(my_data, &n);//得到全局值
sem_wait(my_sem);//加锁
sem_wait(my_data);//充当--操作
sem_post(my_sem);//解锁
Output(n);//计算函数
if( n - 1 < 0 )
{
break;
}
}

第一种现象还有,只是少,原因就是锁粒度小了,但是sem_wait(my_data)如果阻塞还是无法break,while就只有挂那了
还有就是计算粒度太小

//第三次代码

while( 1 )
{
if( n - 1 < 0 )
{
break;
}
sem_getval(my_data, &n);//得到全局值
sem_wait(my_sem);//加锁
sem_wait(my_data);//充当--操作
sem_post(my_sem);//解锁
for(i = 0; i < 10; i++)//放大计算粒度
{
Output(n--);//计算函数
}
}

问题总算解决了,锁粒度和计算粒度都合适,多台机子都很好的合作干完分到的任务

这个东西中感觉以后再写程序中,用信号量扮演了share memory的角色,我也没有办法啊,还有多台机子之间的互斥貌似只有用信号量了,这不是重点,重点是在类似这种while中,判断还是放在前面,处理放在后面
当然了,网络的延时在分布式中你不能不考虑,不过这个可以用算法保证,还有真正分布式不可能全用C来写程序,比如流行的ErLang等,但这是一种意识,可供参考!

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

新型高电压精密放大器--业界最精确的SPICE模型

视频 2011-10-17

Nios系统基础上的UItra DMA数据传输模式

资源下载 2007-03-21

Anthropic年化营收破 140 亿,完成 300 亿新融资

智能计算 2026-02-13

一种改进型UML在嵌入式系统中的应用

如何构建eCos嵌入式系统

设计指南-热功率器件设计中的几点思考

AdvancedPCB在硅谷扩充HDI能力,引入先进真空填孔技术

EDA/PCB 2026-02-13

ROHM推出UCR10C分流电阻系列,提升电流检测密度

以芯片设计提升计算效率:每次查询的最低能耗

安世半导体调查启动 闻泰科技唯有苦等

设计指南-空间限定的集成FET的DC - DC转换器

视频 2011-10-18

硬金,硬功夫:设计经久耐用的PCB边缘连接器

EDA/PCB 2026-02-13

设计指南-低功耗压力传感器

3376万台!2025中国平板市场双位数增长,背后是“国补”与换机的双重推力

测量射频电路

视频 2011-10-17

装饰彩灯控制专用集成电路大观(二)

射频在无人机中的应用

模拟技术 2026-02-13

UCIe 核心技术细节悉数落地

基于Windows CE的嵌入式电子邮件系统设计

应用材料公司发布2026财年第一季度财务报告

更多 培训课堂
更多 焦点
更多 视频

技术专区