码迷,mamicode.com
首页 > 编程语言 > 详细

进程 和线程的比较

时间:2019-12-02 12:01:06      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:没有   threading   sleep   进程   process   等等   span   循环   结果   

进程: 所有资源的集合,当一个程序运行时调用的所有资源,例如:硬件资源,软件资源等等, 多进程:是对该程序需要所有资源的一种拷贝,进程与进程之间相对独立。

线程: 程序运行时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类来解决。

进程 和线程的比较

标签:没有   threading   sleep   进程   process   等等   span   循环   结果   

原文地址:https://www.cnblogs.com/zhirou/p/11969526.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!