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

本文介绍了如何在Linux环境下,利用多线程实现文件的并发复制。尽管I/O通常成为瓶颈,但该示例展示了如何根据CPU核心数动态调整并行度,代码中包括了创建线程、分配任务以及读写文件片段的逻辑。最终通过MD5校验确认复制成功。
摘要由CSDN通过智能技术生成

关于这个问题,意义虽然有限因为一般来说在复制文件的时候,实际的瓶颈来自于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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值