這篇文章主要是為了整理 記錄 c 多執行緒 的理解

2021-08-03 03:53:05 字數 2170 閱讀 2756

多執行緒:

首先呢,聊下我對多執行緒的理解.

在我看來,多執行緒就相當於分身術,就像火影忍者的分身術,你可以有很多分身來幫你做各種事情.

程序=你的本體

執行緒=分身

由你的本體創造出來很多分身

你可以讓他們做各種事情。

比如想象一下 你要看 一本書,100頁,那你分身100個 然後一人分一頁給他們看。 那是不是提公升了100倍速度。

還有 做飯 比如 你要做幾個菜:清蒸石斑,油悶大蝦...等等

那你就可以分身 幾個人 讓他們 分別去做某一道菜  這樣也大大縮減了做菜的時間

但是如果灶只有乙個呢,那麼分身在處理食材的時候 只能誰處理完快,誰到需要用灶哪一步 誰先用,另外一些 就只能等待灶 空閒下來才能繼續。

那麼在程式裡面是怎麼解決的呢    lock **塊鎖  先判斷 是否灶已被占用,沒被用 就占用  用完後然後釋放掉給其他人 

示例:

object 灶 = new object();//建立乙個鍋

public void 做飯()

}).start();

new thread(() =>//做油悶大蝦分身(執行緒)

}).start();

}//【時鐘執行緒類別】

//這一型別的有定時執行的效果,並且多數是占用主程序的資源

//【thread】

//using system.threading;命名空間下的

//我平時最喜歡用的類

//靈活,多變,簡單

/// /// 執行緒方法

///

///

public void theradmethod(object obj)

);th.start();

}public void startth()

public void method()

【task】

system.threading.tasks

是執行緒池,由微軟控制 封裝了 如何分配 每個執行緒如何去執行 經測試是這樣的:

下面 是 用task跟thread的區別

**如下:

//task 執行緒

private void button1_click(object sender, eventargs e)

"); }));

endti++;

if (endti == 10)

"); }));

}}).start();}}

//thread 執行緒

private void button2_click(object sender, eventargs e)

"); }));

endthi++;

if (endthi == 10)

"); }));

}}).start();}}

system.object locker = new system.object();

public void add(control control)

));// interlocked.exchange(ref intbool, 0);}}

}

執行結果如下:

while (i < 10000000)//運算的級別

while (i < 100000000)//運算的級別  上乙個運算結果的10倍

你會發現 他們總花費的時間是差不多的,

task 是執行緒池來控制的

我猜thread 是並行 由 cpu 時間片時序來控制

並且他們都是 多核運算的。

taskcup圖

thread cpu圖

未完待續

這篇文章說到點子上了!!

北美家長團 百家號05 2817 42 以前認識乙個美國女孩在中國學習政治經濟,學成之後進入德勤工作,這似乎與她最初的理想相去甚遠,但她仍然非常高興能夠找到乙份待遇不錯的工作。可能很多人會覺得這個女孩的決定很難理解,因為在很多人看來美國年輕人似乎不必為了生存而放棄自己的理想和專業,只有中國的年輕人才...

自律只需要這篇文章

1.鑽研,只要你有乙個方面特別優秀,則在這個社會就足夠了,能夠吃一輩子 2.領悟,需要的時候,別人給你只是乙個具體的方向,具體的路還是要自己去設計 3.執行力,晚上喜歡想想沒有小本本記錄,那麼第二天就忘了,所以床頭一定備個備忘錄,還要有行動能力,不然你就不要記錄,最好就不要想 4.落實,每天幻想自己...

vue開發看這篇文章就夠了

每個月,我們幫助 1000 萬的開發者解決各種各樣的技術問題。並助力他們在技術能力 職業生涯 影響力上獲得提公升。一二三 16 小時前發布 庫,本質上是一些函式的集合。每次呼叫函式,實現乙個特定的功能,接著把控制權交給使用者框架,是一套完整的解決方案,使用框架的時候,需要把你的 放到框架合適的地方,...