什么是线程:
线程是操作系统能够进行运算调度的最小单位(程序执行流的最小单元)。它被包含在进程之中,
是进程中的实际运作单位。一个进程中可以并发多个线程,每条线程并行执行不同的任务。
(线程是进程中的一个实体,是被系统独立调度和分派的基本单元)
线程和进程的区别
(1)线程共享内存空间;进程的内存是独立的
(2)同一个进程的线程之间可以直接交流;两个进程想通信,必须通过一个中间代理来实现
(3)创建新线程很简单; 创建新进程需要对其父进程进行一次克隆
(4)一个线程可以控制和操作同一进程里的其他线程;但是进程只能操作子进程
(5)改变主线程(如优先权),可能会影响其它线程;改变父进程,不影响子进程
=====================================================================
现在pc都是多核的,使用多线程能充分利用 CPU 来提供程序的执行效率
线程:
线程是一个基本的 CPU 执行单元,它必须依托于进程存活
进程:
进程是指一个程序在给定数据集合上的一次执行过程,是系统进行资源分配和运行调用的独立单位。
可以简单地理解为操作系统中正在执行的程序。也就说,每个应用程序都有一个自己的进程
每一个进程启动时都会最先产生一个线程,即主线程。然后主线程会再创建其他的子线程
两者的区别
线程必须在某个进行中执行。
一个进程可包含多个线程,其中有且只有一个主线程。
多线程共享同个地址空间、打开的文件以及其他资源。
多进程共享物理内存、磁盘、打印机以及其他资源
1.我们程序中就有两个线程,一个主线程,一个是我们创建的子线程
from threading import Thread
def Foo(arg):
print arg
print 'before'
# 线程和函数建立关系
t1 = Thread(target=Foo,args=(1,))
t1.start()
print t1.getName()
t2 = Thread(target=Foo,args=(2,))
t2.start()
print t2.getName()
print 'after'
主线程没有结束,那么子线程还会在执行
什么时候主线程序执行完了,子线程序就跟着主线程一起销毁了
from threading import Thread
import time
def Foo(arg):
for item in range(10):
print item
time.sleep(1)
print 'before'
t1 = Thread(target=Foo,args=(1,))
t1.setDaemon(True)
t1.start()
print 'after'
#time.sleep(5)
from threading import Thread
import time
def Foo():
for item in range(10):
print item
time.sleep(1)
print 'before'
t1=Thread(target=Foo)
t1.setDaemon(True)
t1.start()
t1.join(5)
print 'after'
from threading import Thread
def Foo(arg):
print arg
print 'before'
# 让线程和函数建立关系
t1 = Thread(target=Foo,args=(1,))
t1.start()
print t1.getName()
t2 = Thread(target=Foo,args=(2,))
t2.start()
print t2.getName()
print 'after'
线程安全
import threading
import time
num = 0
def run(n):
time.sleep(1)
lock.acquire()
global num
num += 1
print '%s\n' % num
lock.release()
lock = threading.Lock()
for i in range(1500):
t = threading.Thread(target=run,args=(i,))
t.start()