1. 程式人生 > >線程vs進程,多線程實例

線程vs進程,多線程實例

class alt 唱歌 優缺點 get 定義 yellow 單位 range

進程VS線程

功能

  • 進程,能夠完成多任務,比如 在一臺電腦上能夠同時運行多個QQ
  • 線程,能夠完成多任務,比如 一個QQ中的多個聊天窗口

技術分享

定義的不同

  • 進程是系統進行資源分配最小單元.

  • 線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序執行的需要的cpu資源),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源(主要是內存資源).

區別

  • 一個程序至少有一個進程,一個進程至少有一個線程.

  • 線程的劃分尺度小於進程(資源比進程少),使得多線程程序的並發性高。

  • 進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率

  • 線程不能夠獨立執行,必須依存在進程中

優缺點

線程和進程在使用上各有優缺點:線程執行開銷小,但不利於資源的管理和保護;而進程正相反。

多線程-threading

python的thread模塊是比較底層的模塊,python的threading模塊是對thread做了一些包裝的,可以更加方便的被使用

說明

  1. 可以明顯看出使用了多線程並發的操作,花費時間要短很多
  2. 創建好的線程,需要調用start()方法來啟動

主線程會等待所有的子線程結束後才結束

一個多線程實例理解多線程, 查看線程數量

#coding=utf-8
import threading
from time import sleep,ctime


def sing():
    for i in range(3):
        print("正在唱歌...%d"%i)
        sleep(1)


def dance():
    for i in range(3):
        print("正在跳舞...%d"%i)
        sleep(1)

if __name__ == __main__:
    print(---開始---:%s%ctime())

    t1 
= threading.Thread(target=sing) t2 = threading.Thread(target=dance) t1.start() t2.start() while True: length = len(threading.enumerate()) print(當前運行的線程數為:%d%length) if length<=1: break sleep(0.5)

打印結果

---開始---:Wed Nov  8 11:42:41 2017
正在唱歌...0
當前運行的線程數為:3
正在跳舞...0
當前運行的線程數為:3
當前運行的線程數為:3
正在唱歌...1
正在跳舞...1
當前運行的線程數為:3
正在唱歌...2
正在跳舞...2
當前運行的線程數為:3
當前運行的線程數為:3
當前運行的線程數為:1

Process finished with exit code 0

線程vs進程,多線程實例