程序与进程

程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。

程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。

进程是资源分配的最小单位,线程是CPU调度的最小单位,每一个进程中至少有一个线程。

 线程

线程是进程中执行运算的最小单位,是进程中的一个实体,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位。

1、在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位

2、同一进程中的各个线程,都可以共享该进程所拥有的资源

3、一个进程中的多个线程之间,可以并发执行

当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行流的最小单元,当设置多线程时,主线程会创建多个子线程,在python中,默认情况下(其实就是setDaemon(False)),主线程执行完自己的任务以后,就退出了,此时子线程会继续执行自己的任务,直到自己的任务结束,

Python3 通过两个标准库 _thread 和 threading 提供对线程的支持。 
_thread 提供了低级别的、原始的线程以及一个简单的锁,它相比于 threading 模块的功能还是比较有限的。 
threading 模块除了包含 _thread 模块中的所有方法外,还提供的其他方法:

  • threading.currentThread(): 返回当前的线程变量。
  • threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
  • threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。

除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法:

    • run(): 用以表示线程活动的方法。
    • start():启动线程活动。
    • join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
    • isAlive(): 返回线程是否活动的。
    • getName(): 返回线程名。
    • setName(): 设置线程名。
    • setDaemon():设置为后台线程或前台线程(默认)如果是后台线程,主线程执行过程中,后台线程也在执行,主线程执行完毕后,后台线程不论成功与否,均停止;如果是前台线程,主线程执行过程中,前台线程也在执行,主线程执行完毕后,等待前台线程也执行完成后,程序停止。
#!/usr/bin/env python
#coding:utf8 import threading #线程模块
import time def sayhi(num): #定义每个线程要运行的函数
print('running on number',num)
time.sleep(3) if __name__ == "__main__":
t1 = threading.Thread(target=sayhi,args=(33,)) #生成一个线程实例
t2 = threading.Thread(target=sayhi,args=(22,)) #生成另一个线程实例 t1.start() #启动线程
t2.start()
print(t1.getName()) #获取线程名
print(t2.getName())
t1.join() #阻塞主线程,等待t1子线程执行完后再执行后面的代码
t2.join() #阻塞主线程,等待t2子线程执行完后再执行后面的代码
print('-----end')

最新文章

  1. [转]MySQL Explain详解
  2. springMVC配置freemarker 二(问题讨论篇)
  3. CAP Confusion: Problems with ‘partition tolerance’
  4. ERP员工入职登记(五)
  5. 206. Reverse Linked List
  6. 使用UIGestureRecognizer监听屏幕事件
  7. SQL Server DATEADD() 函数
  8. CSS—换行
  9. Android Material Design NavigationView 及 Palette 颜色提取器
  10. laravel4通过控制视图模板路劲来动态切换主题
  11. Android缓存技术
  12. c++ vector(向量)使用方法详解(顺序访问vector的多种方式)
  13. puppet配置问题统计
  14. spring的Profile使用对比和应用场景分析
  15. MySQL 8 配置文件
  16. python的UnboundLocalError: local variable 'xxx' referenced b
  17. java多线程系列5 atomic简介
  18. Linux查看机器和硬盘的SN
  19. uva-11129-分治
  20. Entity Framework 与 LINQ to SQL

热门文章

  1. 暴力穷举zip、rar压缩文件的密码
  2. 自己写IRP,做文件操作,遇到的坑
  3. SpringCloud:基础
  4. mid
  5. vue $attrs 父组件和孙子组件的传值,传函数
  6. 2018-8-10-win10-uwp-ping
  7. Spyder中的一些快捷键
  8. Codeforces 1167E 尺取法
  9. 笔记67 Spring Boot快速入门(七)
  10. vue-cli 3.0版本,配置代理Proxy,不同环境不同target(生产环境,uat环境和本地环境的配置)