進程和線程的區別

  • 進程是資源(CPU、內存等)分配的基本單位,它是程序執行時的一個實例。
  • 線程是程序執行時的最小單位,它是進程的一個執行流。
  • 進程有自己的獨立地址空間,每啟動一個進程,系統就會為它分配地址空間,建立數據表來維護代碼段、堆棧段和數據段,這種操作非常昂貴
  • 線程是共享進程中的數據的,使用相同的地址空間,因此CPU切換一個線程的花費遠比進程要小很多,同時創建一個線程的開銷也比進程要小很多
  • 進程實現
  • <code>from multiprocessing import Pool
    import time
    import random
    import os


    def work(msg):
    start = time.time()
    print("work{}開始執行,id為{}".format(msg, os.getpid()))
    time.sleep(random.random()*2)
    stop = time.time()
    print("work{}耗時{}.".format(msg, stop-start))

    p = Pool()
    for i in range(10):
    # 非堵塞運行
    p.apply_async(work, args=(i,))
    # 堵塞進行
    # p.apply(work, args=(i,))


    print("開始")
    p.close()
    p.join()

    print("結束")/<code>
    • 線程實現

    <code>import threading
    import os
    from time import sleep

    def sorry(i):
    print('say sorry {}'.format(i))
    sleep(1)

    if __name__ == '__main__':
    for i in range(1,10):
    t = threading.Thread(target=sorry, args=(i,))
    t.start()/<code>


    進程和線程的區別


    分享到:


    相關文章: