linux 用内存队列,多线程实现文件拷贝的效率问题

使用多线程拷贝,开四个线程比开一个线程还慢,不知道什么原因,下面附上部分代码,望高人指点!pthread_mutex_lock(&mutexQueue);if(linkq... 使用多线程拷贝,开四个线程比开一个线程还慢,不知道什么原因,下面附上部分代码,望高人指点!
pthread_mutex_lock(&mutexQueue);
if(linkqueue->queuesize>0)
{
con_node=outofQueue(linkqueue);
//为写文件置标志位
if(con_node!=NULL)
flag=1;
else
{
flag=0;
printf("%d ,queue is empty!\n",linkqueue->queuesize);
}
}else//队列空
{
flag=0;
if(Flag_thread==0)
{
//此时队列为空而且Flag_thread为0标志生产者线程结束
//此块是最后一块数据
pthread_mutex_unlock(&mutexQueue);
break;
}
}
pthread_mutex_unlock(&mutexQueue);
代码里面有点冗余的部分,我入队列的时候入的是一个结构体(实质是需要哪个指向内存块的指针),然后把琐释放了,然后再写磁盘,我想这样多个线程可以并行的写磁盘,但是结果是还慢些。。。
展开
 我来答
262454893
2012-11-08 · TA获得超过131个赞
知道答主
回答量:169
采纳率:0%
帮助的人:115万
展开全部
首先硬盘I/O是慢速的I/O。你开了4个线程,无非就是全部在等待。原因很简单,你只有一个硬盘。而这个硬盘同一时间只能被一个线程使用。
更多追问追答
追问
应该不是啊,同学开多线程可以加快速度
追答
其实这个事情很简单,我给你举个例子。
我现在想在纸上写出“求采纳”这三个字。我采用多线程的方式来做这个事情。我找了三个人,一个人写‘求’,一个人写‘采’,一个人写‘纳’。
那么如果我有三支笔,他们每个人一支,那他们的速度肯定是比较快的。
但是如果我只有一支笔,那么他们三个人写的时间与一个人写三个字的时间就几乎是一样的。

希望你能明白。
匿名用户
2012-11-08
展开全部
goole
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
超级123456p
2012-11-08
知道答主
回答量:4
采纳率:0%
帮助的人:6107
展开全部
山嘛意思啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式