/**
* 多线程方式测试
* 检查多线程读取是否可以节省时间
*/
@SuppressWarnings("unchecked")
public static void main(String[] args){
try{
//线程池大小
int poolSize = 20;
long startIndex = 0;//开始位置
int batchSize = 1024*1024*3;//读大小,或缓存大小
long total =new File("E:/Tool/CentOS.5.6.iso").length();
System.out.println(total);
//线程池
ExecutorService executorService = Executors.newFixedThreadPool(poolSize);
LinkedList<Future> queue = new LinkedList<Future>();
long start =System.currentTimeMillis();
while(startIndex <= total){
FileInputStream fis = new FileInputStream(new File("E:/Tool/CentOS.5.6.iso"));
queue.add(executorService.submit(new ThreadTask(startIndex,batchSize,fis)));
startIndex += batchSize;
}
//关闭线程池
executorService.shutdown();
while(!queue.isEmpty()){
try {
queue.pop().get();
} catch (Exception e) {
System.out.println("+异常 ");
}
}
long end =System.currentTimeMillis();
System.out.println("耗时:"+String.valueOf(end-start));
System.out.println("读了:"+ThreadTask.bbb.toString());
}catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 线程任务
*
*/
class ThreadTask implements Runnable{
private FileInputStream fis;
private long startIndex;
private int batchSize;
public static AtomicLong bbb = new AtomicLong(0);
public ThreadTask(long startIndex,int batchSize,FileInputStream fis){
this.startIndex=startIndex;
this.fis=fis;
this.batchSize=batchSize;
}
@Override
public void run() {
try {
//System.out.println(Thread.currentThread().getName()+" 开始");
fis.skip(startIndex);
byte[] b = new byte[batchSize];//缓冲大小
int flag = fis.read(b);
if(flag != -1){
bbb.addAndGet(flag);
}
fis.close();
//System.out.println(Thread.currentThread().getName()+" 结束");
} catch (Exception e) {
e.printStackTrace();
}
}
测试结果:
电脑:华硕N56V
cpu:intel core i5
硬盘:750GB
单线程
时间 大小
42900 4262373376
40545
43477
41259
40810
40591
多线程
时间 线程大小 大小
41855 2 4262373376
41278
42853
42619
45071
43742
43025 3 4262373376
42978
44616
45128
43685
46785
42370 4 4262373376
41371 4
41496
42665
40403
42369
42370 5 4262373376
53539
40373
41215
44678 10 4262373376
43400 10
46768 20 4262373376
48204 20
分享到:
相关推荐
然而,由于GIL(全局解释器锁)的存在,Python的多线程在CPU密集型任务上并不能实现真正的并行计算,但在IO密集型任务(如网络请求)中,多线程仍能提高效率。 另一方面,Python的`multiprocessing`模块提供了类似`...
本主题聚焦于Delphi 7中实现的多线程测试,特别是涉及40个并发线程的情况。Delphi是Embarcadero开发的一款集成开发环境(IDE),它以其高效的Pascal方言——Object Pascal,以及丰富的组件库闻名,适用于创建Windows...
Python 界有条不成文的准则: 计算密集型任务适合多进程,IO 密集型任务适合多线程。本篇来作个比较。 通常来说多线程相对于多进程有优势,因为创建一个进程开销比较大,然而因为在 python 中有 GIL 这把大锁的存在...
Python的多线程不适合CPU密集操作型的任务,适合io密集操作型的任务,例如:SocketServer 如果现在再有CPU密集操作型的任务,那该怎么办呢? 首先说,多进程的进程之间是独立的,然后注意了,python的线程用的是系统...
多线程可以有效地将这些IO密集型任务与CPU密集型任务(如解码)分离,提高程序的并发性能。 在Linux中,多线程编程还需要关注线程安全问题,如避免全局变量的不安全访问,合理管理资源分配和释放,以及正确处理异常...
总结来说,Python的多线程适合处理IO密集型任务和轻量级并发,而多进程则适用于CPU密集型任务和需要充分利用多核优势的场景。了解并熟练掌握这两种并发模型,对于编写高效的Python程序至关重要。在实际开发中,我们...
除了传统的多线程,Delphi还支持异步编程模型,如使用IO Completion Ports(IOCP)来处理I/O密集型任务,提高系统吞吐量。IOCP允许系统在I/O操作完成时自动通知线程,避免了不必要的等待和上下文切换。 七、实际...
在H264解码过程中,MMX可以加速像素操作,比如IDCT(Inverse Discrete Cosine Transform)和运动补偿等计算密集型步骤。 SSE是MMX的增强版,提供更宽的128位寄存器和更多的SIMD指令,可以处理浮点数和更复杂的运算...
多线程可以用于执行计算密集型任务或IO密集型任务,如数据处理、网络通信等。 2. **C++中的线程库**:C++11及后续标准引入了`<thread>`库,为多线程编程提供了支持。这个库包含了一些关键类和函数,如`std::thread`...
但是,多线程仍然可以在IO密集型任务(如网络请求)中发挥作用,因为在等待网络响应时,线程可以被切换,从而让其他线程有机会执行。 这个简单的多线程HTTP压力测试代码对于开发者来说是一个很好的起点,可以根据...
2. **资源高效利用**:多线程能够更有效地利用系统资源,特别是对于CPU密集型或IO密集型任务,通过合理调度线程,可以避免资源空闲,提高整体效率。 3. **异步处理**:多线程支持异步处理模式,使得长时间运行的任务...
Python的全局解释器锁(GIL)限制了在同一时刻只有一个线程执行Python字节码,这在一定程度上影响了多线程在CPU密集型任务中的并行性能,但在IO密集型任务中仍然能提升效率。 总的来说,Python的多线程编程是一种...
这些方法常用于IO密集型操作,避免阻塞主线程。源码可能展示了如何使用这些模式实现异步方法。 6. **并发集合**:C#提供了线程安全的集合,如`ConcurrentBag`、`ConcurrentDictionary`和`ConcurrentQueue`,这些...
6. **异步编程**:虽然多线程可以提高程序并行性,但在UI更新方面,推荐使用异步编程模型,如.NET Framework的`async/await`关键字,这样可以在不阻塞主线程的情况下执行IO密集型任务,保持用户界面的流畅响应。...
在单线程程序中,所有的任务都在同一个线程中执行,这可能导致UI响应变慢,特别是在进行IO密集型操作(如网络下载)时。而多线程允许将耗时的操作(下载任务)放在后台线程,保持主线程(通常负责UI更新)的流畅性。...
多线程并非总是性能提升的关键,由于GIL(全局解释器锁)的存在,Python的多线程在CPU密集型任务上并不能充分利用多核优势。此时,可以考虑使用多进程(`multiprocessing`模块)或者异步IO(`asyncio`模块)来实现...
在实际应用中,我们可能会结合多线程和多进程,比如使用多进程来处理CPU密集型任务,利用多线程处理IO密集型任务,因为IO操作时GIL会被释放,此时多线程可以提高效率。 资源中的"多线程与多进程"文件可能包含以下...
10. **性能优化**:在实现多线程采集时,需要关注CPU使用率、内存占用和IO操作,通过合理的线程数量、任务调度策略等手段优化性能。 这个“多线程采集C#源代码”项目可能包含了以上部分或全部知识点的实现,通过对...
在Python编程中,多线程是一种并发执行任务的机制,尤其在处理I/O密集型任务如网络请求时,能够显著提高程序效率。本教程将详细讲解如何使用Python的多线程来实现对多个网址的快速访问,并记录访问结果。 首先,...
- **IO密集型操作**: 对于IO密集型任务(如文件读写、网络通信等),多线程可以有效地避免等待造成的阻塞,提高效率。 **4.2 改善用户体验** - **响应式界面**: 在GUI应用中,多线程可以确保即使后台正在进行耗时...