进程 如QQ 要以一个整体的形式暴露给操作系统管理,里面包含对各种资源的调用,内存的管理, 网络接口的调用等,进程就是各种资源管理的集合
线程:是操作系统最小的调度单位,是一串指令的结合
进程 要操作CPU,必须要创建一个线程
1所以在同一进程里的线程是共享同一块内存空间的
2两个子进程的数据不是共享的,且不能相互访问,线程数据是共享的
3.同一进程的线程之间可以交流,数据共享, 信息传递,两个进程想通信, 必须通过一个中间代理
4.创建新线程很简单,创建新进程需要对其父进程进行一次克隆
5.一个线程可以控制和操作其他线程,但是进程只能操作子进程
6.对主线程的修改可能会影响到其他的线程,但是进程只会操作子进程
创建进程的第一种方法 :函数调用
1 import threading, time 2 3 def run(n, run_time): 4 print('task run %s'%n) 5 time.sleep(run_time) 6 print('the run %s'%n) 7 8 9 10 11 12 m = threading.Thread(target=run, args=(5, 1)) # child thread 13 14 m1 =threading.Thread(target=run, args=(2, 3)) 15 16 m.start() 17 m1.start() 18 19 m1.join() #执行完子线程m1 20 m.join() #执行完子线程m2 21 22 23 print('alex')
创建进程的第二种方法:继承 threading.Thread
import threading, time class MyThread(threading.Thread): def __init__(self, n, run_time): threading.Thread. __init__(self) self.n = n self.time = run_time def run(self): print('task run%s'%self.n) time.sleep(self.time) print('the run%s'%self.n) m = MyThread(1, 5) m1 = MyThread(3, 2) m.start() m1.start() m.join(timeout=2) #执行两秒后就往下执行 m1.join(1) #执行一秒后就往下执行 print('task done')