进程 和线程的比较
Posted zhirou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程 和线程的比较相关的知识,希望对你有一定的参考价值。
进程: 所有资源的集合,当一个程序运行时调用的所有资源,例如:硬件资源,软件资源等等, 多进程:是对该程序需要所有资源的一种拷贝,进程与进程之间相对独立。
线程: 程序运行时CPU对函数,方法等的一种调度,多线程指的是同一时间可以干很多事,就像一个会分身术的人一样,同一时间可以搞多个分身,来干不同的事情,有主人(主线程)负责整体运行。
一个进程里面可以有多个线程,反之不成立。
例如:
import multiprocessing import threading import time num = 0 def nums(a): for i in range(a): global num num += 1 time.sleep(1) print(‘----1----{0}‘.format(num)) def nums2(a): for i in range(a): global num num += 1 time.sleep(1) print(num, ‘‘) def main(): """多进程""" # 创建进程对象 p1 = multiprocessing.Process(target=nums, args=(20,)) p1.start() p2 = multiprocessing.Process(target=nums2, args=(20,)) p2.start() # """多线程""" # t1 = threading.Thread(target=nums, args=(100000,)) # t1.start() # t2 = threading.Thread(target=nums2, args=(100000,)) # t2.start()
多进程运行的结果可以看出,连个进程都是独立的.。 然而,多线程则是共享全局变量的
多进程结果:
----1----1
1
----1----2
2
----1----3
3
----1----4
4
----1----5
5
----1----6
6
----1----7
7
----1----8
8
----1----9
9
----1----10
10
..........
多线程运行结果:
----1----133255 143445
多线程的结果是因为,一个线程在运行的时候没有运行完,就被cpu清除出去,让另一个线程运行,如此循环,两个线程又共享全局变量,所以就造成了结果并非预期的200000。
解决这个问题可以用 Threading包里面的互斥锁Lock类来解决。
以上是关于进程 和线程的比较的主要内容,如果未能解决你的问题,请参考以下文章