linux 多核CP 线程,LINUX 如何实现多线程进行cp复制

关于这个问题,意义虽然有限因为一般来说在复制文件的时候,实际的瓶颈来自于I/O,不管开启多少个线程实际上速度并不会快多少,但是为了练习多线程编程,

这里给出了一种C++代码实现的方式,代码附在最后。

实际上就是将一个文件分割为多个片段,开启多个线程进行同时复制,如果用户制定的并行大于服务器实际的CPU核数,程序会自动降级并行度为CPU核数,如果文件小于

100M则并行度始终为1。

root@bogon:/home/gaopeng/mmm# ./parcp log.log log10.log 2

set parallel:2

Your cpu core is:4

real parallel:2

Will Create 2 Threads

140677902710528:0:174522367:3:4

140677894317824:174522368:349044736:3:4

Copy Thread:140677902710528 work 25%

Copy Thread:140677894317824 work 25%

Copy Thread:140677902710528 work 50%

Copy Thread:140677902710528 work 75%

Copy Thread:140677902710528 work 100%

Copy Thread:140677902710528 work Ok!!

Copy Thread:140677894317824 work 50%

Copy Thread:140677894317824 work 75%

Copy Thread:140677894317824 work Ok!!

复制完成后进行md5验证

root@bogon:/home/gaopeng/mmm# md5sum log.log

f64acc21f7187a865938b340b3eda198  log.log

root@bogon:/home/gaopeng/mmm# md5sum log10.log

f64acc21f7187a865938b340b3eda198  log10.log

可以看出校验是通过的

代码如下:

点击(此处)折叠或打开

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define MAX_BUFFER 65536

using namespace std;

pthread_mutex_t counter_mutex = PTHREAD_MUTEX_INITIALIZER;

class thread_info

{

private:

uint64_t start_pos;

uint64_t end_pos;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值