进程 和线程的比较

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类来解决。

以上是关于进程 和线程的比较的主要内容,如果未能解决你的问题,请参考以下文章

多个请求是多线程吗

线程和进程的比较

python多线程

多线程编程

python中的多线程和多进程编程

进程和线程和协程之间的关系