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);
代码里面有点冗余的部分,我入队列的时候入的是一个结构体(实质是需要哪个指向内存块的指针),然后把琐释放了,然后再写磁盘,我想这样多个线程可以并行的写磁盘,但是结果是还慢些。。。 展开
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);
代码里面有点冗余的部分,我入队列的时候入的是一个结构体(实质是需要哪个指向内存块的指针),然后把琐释放了,然后再写磁盘,我想这样多个线程可以并行的写磁盘,但是结果是还慢些。。。 展开
3个回答
展开全部
首先硬盘I/O是慢速的I/O。你开了4个线程,无非就是全部在等待。原因很简单,你只有一个硬盘。而这个硬盘同一时间只能被一个线程使用。
更多追问追答
追问
应该不是啊,同学开多线程可以加快速度
追答
其实这个事情很简单,我给你举个例子。
我现在想在纸上写出“求采纳”这三个字。我采用多线程的方式来做这个事情。我找了三个人,一个人写‘求’,一个人写‘采’,一个人写‘纳’。
那么如果我有三支笔,他们每个人一支,那他们的速度肯定是比较快的。
但是如果我只有一支笔,那么他们三个人写的时间与一个人写三个字的时间就几乎是一样的。
希望你能明白。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询