Python多线程编程基础1:为什么要使用线程

多线程技术的引入并不仅仅是为了提高处理速度和硬件资源利用率,更重要的是可以提高系统的可扩展性(采用多线程技术编写的代码移植到多处理器平台上不需要改写就能立刻适应新的平台,可以也可以简单地通过增加处理器数量来提高性能)和用户体验。

对于单核CPU计算机而言,使用多线程并不能提高任务完成速度,但有些场合必须要使用多线程技术,或者采用多线程技术可以让整个系统的设计更加人性化。

下面是常见的多线程编程技术应用场景:

  • 使用多个线程下载大文件或完成一个较大的任务,可以在一定程度上提高速度(但是也会带来一些资源管理上的问题,如果处理不好反而会引起麻烦,这个后面再谈)
  • 批量文件复制时,可以使用多个线程来提高整体速度。
  • 在执行一段代码的同时还想接收和响应用户的键盘或鼠标事件以提高用户体验,这时候就只能在主线程中以子线程的形式来运行这段代码。
  • Windows操作系统的Windows Indexing Services创建了一个低优先级的线程,该线程定期被唤醒并对磁盘上的特定区域的文件内容进行索引以提高用户搜索速度。
  • 打开Photoshop、3DsMax这样的大型软件时需要加载很多模块和动态链接库,软件启动时间会比较长。这时候可以使用一个线程来显示一个小动画来表示当前软件正在启动,当后台线程加载完所有的模块和库之后,结束该动画的播放并打开软件主界面,这也是多线程同步的一个典型应用。
  • 字处理软件可以使用一个优先级高的线程来接收用户键盘输入,而使用一些低优先级线程来进行拼写检查、语法检查、分页以及字数统计之类的功能并将结果显示在状态栏上,这无疑会极大方便用户的使用,对于提高用户体验有重要帮助。
  • 在服务器或代理服务器上,同一个服务往往会启动多个线程,每个线程服务于一个客户端,在提高资源利用率的同时也提高了任务的吞吐量。

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2017-07-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java进阶干货

微服务架构组件分析

服务描述:服务调用首先解决的问题就是服务如何对外描述。 常用的服务描述方式包括 RESTful API、XML 配置以及 IDL 文件三种。

13910
来自专栏陈龙涛的专栏

分布式锁服务关键技术和常见解决方案

网络通信的时延和不可靠,加上分布式环境中各种故障的常态化发生,导致实现一个可靠的分布式锁服务需要考虑更多更复杂的问题。

1.1K40
来自专栏GopherCoder

专栏:004:网页下载器的使用

22830
来自专栏最高权限比特流

漫谈计算机组成原理(二)系统总线

从引言中,我们基本上能够了解到总线在计算机系统中的作用。但是上面的说法只是一个概论,我们需要给出更加详细的总线的作用:总线是计算机中各个部件的信息传输线。在计算...

42830
来自专栏微服务生态

由多线程内存溢出产生的实战分析

一日凌晨,手机疯狂报警,短信以摧枯拉朽之势瞬间以百条的速度到达,我在睡梦中被惊醒,看到短信的部分内容如下:

15660
来自专栏数据和云

【推荐】 RAC 性能优化全攻略与经典案例剖析

ORACLE RAC凭借其卓越的容错能力和可扩展性以及对应用透明的切换能力引领了数据库高可用架构的潮流,但在实际的生产环境中,出现的性能问题非常多,对数据库的稳...

34870
来自专栏SDNLAB

ONOS:从DeviceSubsystem看ONOS子系统设计(1):Core层基本功能架构

言 ONOS的内核是由诸多遵循同一架构设计的子系统组成的,Device Subsystem设备子系统就是其中重要的一员。笔者将借助其源码讲解ONOSCore层的...

38980
来自专栏deed博客

天天酷跑破解版制作教程

17750
来自专栏Java架构师学习

你想了解的分布式--从ACID到CAP/BASE

本文先介绍传统关系数据库中事务的ACID特性,再介绍分布式系统中的经典理论——CAP定理和BASE理论。 事务 事务的定义: 事务(Transaction)是由...

30780
来自专栏前端黑板报

插件化思维

用过构建工具的同学都知道,grunt, webpack, gulp 都支持插件开发。后端框架比如 egg koa 都支持插件机制拓展,前端页面也有许多可拓展性的...

24220

扫码关注云+社区

领取腾讯云代金券