多线程--何时用到多线程
何时使用多线程技术,何时避免用它,是我们需要掌握的重要课题。多线程技术是一把双刃剑,在使用时需要充分考虑它的优缺点。
多线程处理可以同时运行多个线程。由于多线程应用程序将程序划分成多个独立的任务,因此可以在以下方面显著提高性能:
(1)多线程技术使程序的响应速度更快 ,因为用户界面可以在进行其它工作的同时一直处于活动状态;
(2)当前没有进行处理的任务时可以将处理器时间让给其它任务;
(3)占用大量处理时间的任务可以定期将处理器时间让给其它任务;
(4)可以随时停止任务;
(5)可以分别设置各个任务的优先级以优化性能。
是否需要创建多个线程取决于各种因素。在以下情况下,最适合采用多线程处理:
(1)耗时或大量占用处理器的任务阻塞用户界面操作;
(2)各个任务必须等待外部资源 (如远程文件或 Internet连接)。
同样的 ,多线程也存在许多缺点 ,在考虑多线程时需要进行充分的考虑。多线程的主要缺点包括:
(1)等候使用共享资源时造成程序的运行速度变慢。这些共享资源主要是独占性的资源 ,如打印机等。
(2)对线程进行管理要求额外的 CPU开销。线程的使用会给系统带来上下文切换的额外负担。当这种负担超过一定程度时,多线程的特点主要表现在其缺点上,比如用独立的线程来更新数组内每个元素。
(3)线程的死锁。即较长时间的等待或资源竞争以及死锁等多线程症状。
(4)对公有变量的同时读或写。当多个线程需要对公有变量进行写操作时,后一个线程往往会修改掉前一个线程存放的数据,从而使前一个线程的参数被修改;另外 ,当公用变量的读写操作是非原子性时,在不同的机器上,中断时间的不确定性,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这种错误是程序员无法预知的。
--------------------------------
1、如果程序中需要硬件IO操作,比如串口读写、Socket通讯等,这时,用后台线程或线程池的方式,可以程序避免长时间的等待比较慢速的IO操作;
2、如果程序中有较多的并发任务,例如,正在大量读取数据库以生成报表时,还需要实时接收告警数据,这时需要将大任务用线程在后台实现;
还有挺多情况,不一一列举了
如果说我们做一个实时通讯的工具,界面是一个线程,一直都必须运行,不能被占用(比如说通讯的线程),被占用的话就会出现界面停滞或者卡死现象,
这个时候而通讯线程需要时刻监视和处理来往通讯的信息,也是需要时刻运行的,这两个线程都必须是时刻运行的,所以你现在明白了,这了就需要多线程了对不?
(1)耗时或大量占用处理器的任务阻塞用户界面操作;
(2)各个任务必须等待外部资源 (如远程文件或 Internet连接)。
多线程--何时用到多线程相关推荐
- [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(三) 利用多线程提高程序性能(下)...
[.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(二) 利用多线程提高程序性能(下) 本节导读: 上节说了线程同步中使用线程锁和线程通知的方式来处理资源共享问题,这 ...
- python多线程没用_python的多线程到底有没有用?
在群里经常听到这样的争执,有人是虚心请教问题,有人就大放厥词因为这个说python辣鸡.而争论的核心无非就是,python的多线程在同一时刻只会有一条线程跑在CPU里面,其他线程都在睡觉.这是真的吗? ...
- 异步多线程(五)多线程异常处理
异步多线程(五)多线程异常处理 参考文章: (1)异步多线程(五)多线程异常处理 (2)https://www.cnblogs.com/JohnTang/p/11010357.html (3)http ...
- python多线程爬虫实例-Python多线程在爬虫中的应用
题记:作为测试工程师经常需要解决测试数据来源的问题,解决思路无非是三种:(1)直接从生产环境拷贝真实数据 (2)从互联网上爬取数据 (3)自己用脚本或者工具造数据.前段时间,为了获取更多的测试数据,笔 ...
- python多线程爬虫实例-Python3多线程爬虫实例讲解代码
多线程概述 多线程使得程序内部可以分出多个线程来做多件事情,充分利用CPU空闲时间,提升处理效率.python提供了两个模块来实现多线程thread 和threading ,thread 有一些缺点, ...
- python多线程的作用_Python多线程中三个函数的强大功能简介
在Python多线程中有三个比较简单的函数,在实际的相关操作中你对这一实际操作是否了解?是否对其感兴趣?如果你想对Python多线程的开发与多线程程序及相关实际操作方案有所了解的话,你就可以点击以下的 ...
- Spring Boot 2.x多线程--使用@Async开启多线程使用示例
Spring Boot 2.x多线程–使用@Async开启多线程,配置类+启动类注解,搞定多线程任务. 配置类TaskPoolConfig.java import org.springframewor ...
- Java多线程之单例模式在多线程环境下的安全问题
Java多线程之单例模式在多线程环境下的安全问题 目录: 单例模式基本概念 单线程下的单例模式 多线程下的单例模式 单例模式volatile分析 1. 单例模式基本概念 基本概念转载自:单例模式|菜鸟 ...
- python多线程共享全局变量_Python多线程-共享全局变量
多线程-共享全局变量 import threading import time g_num = 200 def test1(): global g_num for i in range(5): g_n ...
- C++多线程实例(_beginThreadex创建多线程)
C++多线程(二)(_beginThreadex创建多线程) C/C++ Runtime 多线程函数 一 简单实例(来自codeprojct:http://www.codeproject.com/us ...
最新文章
- 超详细的 Bert 文本分类源码解读 | 附源码
- 1047. 删除字符串中的所有相邻重复项
- java ceilingentry_java.util.TreeMap.ceilingKey()
- linux:Too Many Open Files(打开的文件过多)
- Hyper-V Server共享VHDX
- Vue warn Failed to mount component: template or render function not defined
- Orleans解决并发之痛(三):集群
- docker create_Docker动手教程2.2:容器基本操作2
- Tomcat帮助文档翻译 未完成
- Xml序列化、反序列化帮助类
- Coinbase报告:DeFi协议总锁仓价值已超250亿美元,同比增长2500%
- php 读取管道,php – 使用proc_open时从STDIN管道读取
- 起点文学网ViewState解码分析后的结果研究
- mysql 分段解析_MYSQL分段统计
- CPU 用户时间 系统时间
- python在线翻译小程序_Python 做一个翻译小程序
- 简账(开源记账软件)-后端环境简介及部署
- 基于FFmpeg的H265编码器
- 蓝桥杯就要开赛了,填空题还不会?我教你一篇学会填空题,从此填空满分,信心大涨
- 让鼠标漫天飞舞:在内核中实现鼠标的中断处理