关于多线程提高程序执行速率的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于多线程提高程序执行速率的问题相关的知识,希望对你有一定的参考价值。

多线程可以提高,程序的执行速度。从宏观上讲好像是多个线程同时执行。但微观上,线程的执行都是要占用cpu的时间片的,也就是一个时间只能执行一项任务。为什么会提高执行速度呢?不是很明白

多线程只有在多处理器系统(比如多核、smp等)上才有可能提高执行速率。在多处理系统上,将要执行的任务分割成多个可并行执行线程,就可以提高执行速率。但是如果任务本身不可并行,比如就是一个有限状态自动机的程序,那就没办法用到多处理机,也不能提高速率。上面说的是并行,不是并发。单处理器上多线程只能并发执行而不是并行,多线程并不能提高纯计算程序的速率。但是对于一般程序中都有i/o操作等,可以将io操作放到一个线程中执行,从而可以在io同时进行其他操作不比等待io完成,这样可以提高速率。不宜创建过多线程,因为线程context switch造成很大的cpu负荷,并且线程占用内存资源。现在的网络服务器为了支持大量并发多不是靠多线程或多进程,而采用其他的技术如异步i/o,i/o multiplexing 参考技术A 我认为,多线程提高效率是有前提的。
如果只是让CPU执行计算,就像你说得,现在的微机都是分时处理,单线程和多线程的效率几乎一致,甚至单线程还要快一点,关于这个我是做过测试的。

多线程提高效率的情况是,比如需要等待IO或者用户响应的情况。
举个列子,一个ping的小程序。从网址192.168.1.1到192.168.1.255,循环ping,假设每个网址都ping不通,计算机等待3秒超时。
如果使用单线程,则需要255*3秒时间。如果使用C#线程池或者4.0的并行计算,则会节约10倍左右的时间。本回答被提问者和网友采纳
参考技术B 如果从运算效率上来说,多线程的优势必须要多核的CPU和64位的操作系统才能体现
但是从一些程序的流程上来说,多线程是非常必要的,比如一个WINFORM的程序不用多线程处理的话,当你程序在运算某种数法的时候,你的主窗体就处于一个假死状态
因为你的程序只有一个线程,它处理了运算过程,放弃窗体的显示这一块,而多线程则刚好解决了这个问题
参考技术C 你要更宏观的 来理解
现在你只是看到你这一个程序,如果有10个程序 ,你这个一个程序多开了一个线程就把原本其他程序使用cpu的时间抢了过来
原来你这个程序1分钟内只能占用cpu 10秒钟 线程多了以后1分钟内可以占用20秒了没准

以上是关于关于多线程提高程序执行速率的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何提高数据库数据更新速率

OpenCV C++ 多线程提高帧率

关于多线程的小笔记

关于多线程

关于线程

python之多线程与多进程