Python高階(2) 程序與執行緒的概念

2022-09-18 10:12:31 字數 3658 閱讀 6794

程序定義:

程序就是乙個程式在乙個資料集上的一次動態執行過程。程序一般由程式、資料集、程序控制塊三部分組成,是最小的資源管理單元

程式:用來描述程序要完成哪些功能以及如何完成;

資料集:則是程式在執行過程中所需要使用的資源;

程序控制塊:用來記錄程序的外部特徵,描述程序的執行變化過程,系統可以利用它來控制和管理程序,它是系統感知程序存在的唯一標誌。

執行緒的出現是為了降低上下文切換的消耗,提高系統的併發性,並突破乙個程序只能幹一樣事的缺陷,使到程序內併發成為可能。

執行緒也叫輕量級程序,它是乙個基本的cpu執行單元,也是程式執行過程中的最小單元,由執行緒id、程式計數器、暫存器集合和堆疊共同組成。執行緒的引入減小了程式併發執行時的開銷,提高了作業系統的併發效能。執行緒沒有自己的系統資源。

程序是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。或者說程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的乙個獨立單位。

執行緒則是程序的乙個實體,是cpu排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位。

程序和執行緒的關係:

(1)乙個執行緒只能屬於乙個程序,而乙個程序可以有多個執行緒,但至少有乙個執行緒。

(2)資源分配給程序,同一程序的所有執行緒共享該程序的所有資源。

(3)cpu分給執行緒,即真正在cpu上執行的是執行緒。

切換:切換的操作者是作業系統

程序/執行緒切換的原則:

1、時間片

2、遇到io操作切換

3、優先順序切換

並行處理(parallel processing)

是計算機系統中能同時執行兩個或更多個處理的一種計算方法。並行處理可同時工作於同一程式的不同方面。並行處理的主要目的是節省大型和複雜問題的解決時間。

併發處理(concurrency processing):

指乙個時間段中有幾個程式都處於已啟動執行到執行完畢之間,且這幾個程式都是在同乙個處理機(cpu)上執行,但任乙個時刻點上只有乙個程式在處理機(cpu)上執行

併發的關鍵是你有處理多個任務的能力,不一定要同時。並行的關鍵是你有同時處理多個任務的能力。所以說,並行是併發的子集

在計算機領域,同步就是指乙個程序在執行某個請求的時候,若該請求需要一段時間才能返回資訊,那麼這個程序將會一直等待下去,直到收到返回資訊才繼續執行下去

非同步是指程序不需要一直等下去,而是繼續執行下面的操作,不管其他程序的狀態。當有訊息返回時系統會通知程序進行處理,這樣可以提高執行的效率

舉個例子,打**時就是同步通訊,發短息時就是非同步通訊。

import threading,time

def foo(n):

print('>>>>>>>>>>>%s'%n)

time.sleep(n)

def bar(n):

print('>>>>>>>>>>>%s' % n)

time.sleep(n)

s=time.time()

t1=threading.thread(target=foo,args=(2,))

t1.start()

t2=threading.thread(target=bar,args=(5,))

t2.start()

print('ending!')

#繼承thread式建立

import threading

import time

class mythread(threading.thread):

def __init__(self,num):

threading.thread.__init__(self)

self.num=num

def run(self):

print("running on number:%s" %self.num)

time.sleep(3)

t1=mythread(56)

t2=mythread(78)

t1.start()

t2.start()

print("ending")

1

# join():在子執行緒完成執行之前,這個子執行緒的父執行緒將一直被阻塞。23

# setdaemon(true):

4'''

5將執行緒宣告為守護執行緒,必須在start() 方法呼叫之前設定,如果不設定為守護執行緒程式會被無限掛起。 當我們在程式執行中,執行乙個主線程,如果主線程又建立乙個子執行緒,主線程和子執行緒 就分兵兩路,分別執行,那麼當主線程完成

6想退出時,會檢驗子執行緒是否完成。如果子執行緒未完成,則主線程會等待子執行緒完成後再退出。但是有時候我們需要的是只要主線程

7 完成了,不管子執行緒是否完成,都要和主線程一起退出,這時就可以 用setdaemon方法啦''89

thread例項物件的方法

10# isalive(): 返回執行緒是否活動的。

11# getname(): 返回執行緒名。

12# setname(): 設定執行緒名。

1314

threading模組提供的一些方法:

15# threading.currentthread(): 返回當前的執行緒變數。

16# threading.enumerate(): 返回乙個包含正在執行的執行緒的list。正在執行指執行緒啟動後、結束前,不包括啟動前和終止後的執行緒。

17 # threading.activecount(): 返回正在執行的執行緒數量,與len(threading.enumerate())有相同的結果。'

舉例:

import threading,time

def foo(n):

print('>>>>>>>>>>>%s'%n)

time.sleep(n)

print(threading.active_count())

def bar(n):

print('>>>>>>>>>>>%s' % n)

time.sleep(n)

print(threading.active_count())

s=time.time()

t1=threading.thread(target=foo,args=(2,))

# t1.setdaemon(true)

t1.start()

t2=threading.thread(target=bar,args=(5,))

# t2.setdaemon(true)

t2.start()

t1.join()

t2.join()

print('++++++++++',threading.active_count())

print('ending!')

print('cost time:',time.time()-s)

Python 高階 程序和執行緒

一 編碼規範 1 編排 1 縮排四個空格,空格與tab不能混用 2 行長80,防止單行邏輯複雜 2 import 1 不能用 from import 2 順序 標準庫 第三方庫 自定義庫 3 單行不要import多個庫 4 模組內用不到的不要去import 3 空格 1 標點符號後面跟乙個空格,前面...

2程序與執行緒

2.1.1 程序模型 2.1.2 程序的建立 2.3 程序間通訊 2.3.1 競爭條件 當等待磁碟請求完成時,其他更多的請求將會進入 若有多磁碟存在,可在滿足第乙個請求之前 要一些方法去模擬並控制這種併發 程序 特別執行緒 在這裡就發揮作用 或 某個使用者程序可能會在所有使用者上網的時候 這些活動都...

Python的執行緒與程序

程序是資源分配的最小單位,執行緒是cpu排程的最小單位。執行緒可以讓應用程式併發的執行多個任務,執行緒之間方便共享資源,程序之間資訊難以共享。引用知乎大佬的比喻,程序 火車,執行緒 車廂 簡單使用from concurrent.futures import threadpoolexecutor im...