为什么使用多线程,多线程如何提高效率

一、 从多线程提高程序执行效率的角度,讨论如何提高效率以及为什么使用多线程

1.1 在多核处理系统上,将要执行的任务分割成多个可并行执行线程,就可以提高执行速率

1.2 单处理器上多线程只能并发执行而不是并行,并发原理,其实就是cpu快速来回切换,在特定的时间执行特定的某一个任务。并发执行存在着线程间上下文切换的问题,会消耗一定的时间。如果不考虑阻塞,多线程并发执行其实比单线程执行更加耗费时间,线程过多也会造成CPU负荷过大,并且线程占用内存资源,创建销毁线程也都是需要开销的。

多线程通过提供CPU利用率来提高效率。数据库访问、磁盘IO等操作的速度比CPU执行代码速度慢很多,单线程环境下,这些操作会阻塞程序执行,导致CPU空转,因此对于会产生这些阻塞的程序来说,使用多线程可以避免在等待期间CPU的空转,提高CPU利用率。

考虑到多线程存在的一些缺点,现在的网络服务器为了支持大量并发多不是靠多线程或多进程,而采用其他的技术如异步i/o

二 、从程序设计的角度,讨论为什么使用多线程

使用多线程可以有效的避免阻塞,从而可以设计响应式程序,用户界面更加吸引人,比如用户点击了一个按钮去触发某事件的处理,将事件处理作为一个单独线程,另外设计线程弹出一个进度条来显示处理的进度。

三、顺便一提多进程

多进程模式最大的优点就是稳定性高,因为一个子进程崩溃了,不会影响主进程和其他子进程。(当然主进程挂了所有进程就全挂了,但是Master进程只负责分配任务,挂掉的概率低)著名的Apache最早就是采用多进程模式。

多进程模式的缺点是创建进程的代价大。另外,操作系统能同时运行的进程数也是有限的,在内存和CPU的限制下,如果有几千个进程同时运行,操作系统连调度都会成问题。

多线程模式通常比多进程快一点,但是也快不到哪去,而且,多线程模式致命的缺点就是任何一个线程挂掉都可能直接造成整个进程崩溃,因为所有线程共享进程的内存。在Windows上,如果一个线程执行的代码出了问题,你经常可以看到这样的提示:“该程序执行了非法操作,即将关闭”,其实往往是某个线程出了问题,但是操作系统会强制结束整个进程。

四、多线程应用举例

1. 图形用户界面中,多线程可以提供用户界面响应灵敏度。

2. 服务器应用程序中,可以提升资源利用率以及系统吞吐率。比如在tomcat中一部分线程接受请求,另一部分线程处理请求。

3. 下载大文件时,大文件可以分成多个部分,每个线程下载一部分。

4. 分布式计算。

5. 定时任务。

6. 生产者和消费者模型。

7. Servlet和JSP,多并发时可能有多个客户端请求Servlet,Servlet必须是线程安全的。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用多线程可以提高效率的原因有多个。首先,多线程可以充分利用多核处理器的优势,同时执行多个任务,从而提高整体的处理能力和效率。引用指出,当多线程的进程是CPU密集型的时候,多线程并不能有太多的效率提升,甚至可能因为线程切换导致效率下降。但是,在任务中存在IO操作等阻塞情况下,多线程可以避免阻塞,提高CPU的利用率。引用中指出,在单线程中,如果一个线程阻塞了,后面的线程也会被阻塞,导致CPU空闲。而使用多线程,其他线程可以在等待数据返回的时间段内执行,充分利用CPU资源,提高效率。同时,多线程能够并发或并行执行,极大地提高了CPU的利用效率。并行执行是指多个线程在同一时间启动执行,而并发执行是指在某一段时间内有多个线程执行。引用中指出,多线程的并行和并发执行能够大幅度提高CPU的利用效率。总的来说,多线程可以通过充分利用多核处理器、避免阻塞、提高并发执行来提高效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python中单线程、多线程和多进程的效率对比实验](https://download.csdn.net/download/weixin_38588520/13757787)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [为什么要使用多线程?你只知道多线程可以提高性能?](https://blog.csdn.net/weixin_47303191/article/details/124407885)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [为什么使用多线程多线程如何提高效率](https://blog.csdn.net/java_lifeng/article/details/102838559)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值