1.什么是多线程?
进程:当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程可以由多个线程组成。
线程:是程序中的一个执行流,每个线程都有自己的专用寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。
多线程:指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是允许单个程序创建多个并行执行的线程来完成各自的任务。
多线程的好与不好:
利:提高CPU的利用率,在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待。提高程序的效率。
弊:线程也是程序,需要占用内存,线程越多占用内存越多;多线程之间需要协调管理;线程之间对共享资源的访问会相互影响。
生活例子:
多线程:你可以一心多用,在烧水的同时洗着菜并且听着音乐。
单线程:必须一心一用,烧着水的时候,什么都不能做,一直等着水开了,才能去洗菜,洗完菜才可以听音乐,所有的事情不能同时执行,必须执行完一个才能进行下一个。
伪代码:
While(condition)
{
Fun1();
Fun2();
}
若Fun1执行时间太长,Fun2就不能得到即时的执行,如果把两个过程独立在不同的线程中来处理,那么两个线程都可以得到即时的执行。
2.为什么要用多线程?
应用场景:
想要同时处理多件事:单线程处理不了的,必须使用多线程。(类似于分身术)
多个线程分解大任务:用单线程可以做的,但是使用多线程可以更快。(类似于左右开弓)
场景描述:
执行实际工作20秒钟,20秒时间到介绍执行。
使用两个线程,一个用于计时,一个用于执行实际工作。在执行实际工作的线程启动前启动计时线程。
3.多线程怎样实现?(python)
Python使用线程有两种方式:函数或者用类来包装线程对象。
1)函数式
import time
import _thread
def timer(num,interval):
cnt = 0
print("121")
while cnt<10:
print("Thread:(%d) Time:%s\n"%(num,time.ctime()))
time.sleep(interval)
cnt = cnt+1
_thread.exit_thread()
def test():
_thread.start_new_thread(timer,(1,1))
_thread.start_new_thread(timer,(2,2))
if __name__ == "__main__":
test()
2)创建子类来包装一个线程对象
import threading
import time
class timer(threading.Thread):
def __init__(self,num,interval):
threading.Thread.__init__(self)
self.thread_num = num
self.interval = interval
self.thread_stop = False
def run(self):
while not self.thread_stop:
print("ThreadObject(%d),Time:%s\n"%(self.thread_num,time.ctime()))
time.sleep(self.interval)
def stop(self):
self.thread_stop = True
def test():
thread1 = timer(1,1)
thread2 = timer(2,2)
thread1.start()
thread2.start()
time.sleep(10)
thread1.stop()
thread2.stop()
return
if __name__ == "__main__":
test()
【参考资料】:
http://blog.csdn.net/zhaonanemail/article/details/7175449
http://bbs.csdn.net/topics/300001225
http://blog.csdn.net/nidexuanzhe/article/details/6624444
http://www.cnblogs.com/tqsummer/archive/2011/01/25/1944771.html