用《捕魚達人》去理解C 中的多執行緒

2021-09-07 20:39:53 字數 3490 閱讀 5740

執行緒是程序中某個單一順序的控制流,是程式執行中的排程單位,是程式執行流的最小單位,乙個標準的執行緒由執行緒id,當前指令指標(pc),暫存器集合和堆疊組成。 執行緒自己不擁有系統資源,只擁有一點兒在執行中必不可少的資源,但它可與同屬乙個程序的其它執行緒共享程序所擁有的全部資源。 執行緒也有就緒、阻塞和執行三種基本狀態。每乙個程式都至少有乙個執行緒,若程式只有乙個執行緒,那就是程式程序本身。

clr中有三種常用建立和管理執行緒的方式:thread、threadpool、task,下面用最簡單的例子寫出自己對這三種方式的理解:

《捕魚達人》是大家都玩過的遊戲,至於遊戲怎麼設計我也不太清楚,但我想在這裡用自己對執行緒的理解來用執行緒描述這個遊戲。假如螢幕上隨機產生兩條魚,並且游來游去,**如下:

class

fish

public

fish()

public

void

move()

在游來游去......

", name));}}

class

program

);t1.isbackground = true

; t1.start();

fish fish2 = new fish() ;

thread t2 = new thread(() =>);

t2.isbackground = true

; t2.start();

console.readkey();

}}

執行後螢幕如下:

小黃魚在游來游去......

大鯊魚在游來游去...... 

如果魚潮來臨,一下子要產生100條魚,如果按上面thread的做法就要開啟100條執行緒,這樣對系統資源的損耗太大,這時我們可以用threadpool執行緒池來實現,**如下:

static

void main(string

args)

;fish fish3 = new fish() ;

fish fish4 = new fish() ;

fish fish100 = new fish() ;

threadpool.queueuserworkitem(f =>);

threadpool.queueuserworkitem(f =>);

threadpool.queueuserworkitem(f =>);

threadpool.queueuserworkitem(f =>);

threadpool.queueuserworkitem(f =>);

console.readkey();

}

執行後螢幕如下:

燈籠魚在游來游去......

大鯊魚在游來游去......

燈籠魚在游來游去......

小黃魚在游來游去......

紅鯉魚在游來游去......

由於多執行緒是併發執行,由系統分配順序,所以上面的結果是隨機的 

class

program

;task t1 = new task(() =>fish.move(cts.token), cts.token);

t1.start();

//小黃魚被擊中後顯示積分

t1.continuewith(fish.showscore);

task t2 = new task(() =>fish2.move(cts.token), cts.token);

t2.start();

//大鯊魚魚被擊中後顯示積分

t2.continuewith(fish2.showscore);

//按任意鍵發射

console.readkey();

//**工廠執行緒池,執行一組任務

gun gun = new

gun();

lasergun lasergun = new

lasergun();

taskfactory taskfactory = new

taskfactory();

task tasks = new

task

;//執行**們**

taskfactory.continuewhenall(tasks, (task) =>);

//魚兒們被擊中了就會去調顯示積分的方法

cts.cancel();

console.readline();}}

class

fish

public

int score

public

fish()

//////

游動

/// public

void

move(cancellationtoken ct)

在游來游去......

", name));

thread.sleep(

1000

); }

}//中槍死亡後顯示獎勵

public

void

showscore(task task)

中彈了,您得到分......

", name, score));}}

abstract

class

weapon

public

abstract

void

fire();

}class

gun : weapon

public

override

void

fire()

向魚兒們發射子彈......

", name));}}

class

lasergun : weapon

public

override

void

fire()

向魚兒們發射炮彈......

", name));

}}

執行後螢幕如下:

大鯊魚在游來游去......

小黃魚在游來游去......

大鯊魚在游來游去......

小黃魚在游來游去......

大鯊魚在游來游去......

小黃魚在游來游去...... 

按任意鍵**後螢幕顯示:

大鯊魚在游來游去......

小黃魚在游來游去......

大鯊魚在游來游去......

小黃魚在游來游去......

大鯊魚在游來游去......

小黃魚在游來游去......

咻咻咻,雙射槍向魚兒們發射子彈......

嗖嗖嗖,雷射炮向魚兒們發射子彈......

大鯊魚中彈了,您得到100分......

小黃魚中彈了,您得到1分...... 

from:

理解 Python 中的多執行緒

1 單執行緒 import time import urllib2 defget responses urls start time.time for url in urls print url resp urllib2.urlopen url print resp.getcode print el...

Python多執行緒與多執行緒中join 的用法

文章 python多執行緒與多程序中join 方法的效果是相同的。下面僅以多執行緒為例 首先需要明確幾個概念 知識點一 當乙個程序啟動之後,會預設產生乙個主線程,因為執行緒是程式執行流的最小單元,當設定多執行緒時,主線程會建立多個子執行緒,在python中,預設情況下 其實就是setdaemon f...

Python多執行緒與多執行緒中join 的用法

python多執行緒與多程序中join 方法的效果是相同的。下面僅以多執行緒為例 首先需要明確幾個概念 知識點一 當乙個程序啟動之後,會預設產生乙個主線程,因為執行緒是程式執行流的最小單元,當設定多執行緒時,主線程會建立多個子執行緒,在python中,預設情況下 其實就是setdaemon fals...