成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

線程的來龍去脈,你了解嗎?

網絡 通信技術
進程最近有些煩惱,整日愁眉苦臉的,拜訪內存的時候也有點心不在焉。內存是個明眼人,開門見山的問道:“進程啊,最近遇到啥問題了?我看你最近情緒有點低落,有啥問題你就直接說出來嘛,我讓大家伙兒來一起幫你想想辦法。”

 [[280855]]

進程最近有些煩惱,整日愁眉苦臉的,拜訪內存的時候也有點心不在焉。

內存是個明眼人,開門見山的問道:“進程啊,最近遇到啥問題了?我看你最近情緒有點低落,有啥問題你就直接說出來嘛,我讓大家伙兒來一起幫你想想辦法。”

進程嘆了口氣,說道:“唉,最近不是說 CPU 單核頻率到瓶頸了嗎?人類就用多核芯來彌補單核處理器性能的不足,咱們的 CPU 不也升級到四核了嘛。”

“是啊,這是好事啊,現在最多能并行處理 4 個進程,效率比以前高多了,這還不好嗎?”內存疑惑的問。

“好是好,可我每次上 CPU 運行的時候,都忍不住去想,要是單核頻率不增加,我總的運行的時間不還是沒有什么變化嗎?以后的應用程序越來越大,越來越吃 CPU 資源,比如那些大型游戲進程,在短時間內需要進行大量計算,靠單核撐不住怎么辦。不談以后,就說說我自己,我也想能夠早點運行完,早點休息啊。”

tobe 注:很明顯單進程的運行時間是變小了的,不過這里主要強調的是進程占用 CPU 的時間。

內存點點頭,贊同道:“這個問題我倒是沒想到,多核處理器對單個進程確實不大友好。那咱得想辦法讓你能夠同時使用幾個核心。不過我一時間也想不到什么好辦法,還是和大家一起討論下吧。”

在討論會上,內存向大家說明了進程現在遇到的問題。

“一個進程怎么并行?”進程調度器第一個發出疑問:“我總不能把一個進程放在四個核上吧,這樣不僅毫無意義,還阻礙了其他進程的執行。”

關于進程調度器,可以看這篇文章:進程調度,一個調度器的自白

操作系統見多識廣,說:“把進程一次放在幾個核上運行肯定是不可能的,我在想,咱們的目標,其實就是讓多個核心不沖突地幫助一個進程運行嘛。那我們就得把進程「拆開」,然后放在幾個核上。”

操作系統一邊說,一邊畫了張圖:

線程的來龍去脈,你了解嗎?

進程拆分

“你們看,假如說 fun1 和 fun2 這兩個函數互不關聯,我們就可以讓兩個核同時執行他們,這不就做到并行了嗎?”

“你的意思是說把一個進程拆成好幾個進程?”

操作系統搖搖頭:“不是拆成多個進程,進程切換的代價太大了,再說了,這些拆出來的函數,他們是共用一個地址空間的,天生就能夠數據共享,如果拆成進程,我們還得再考慮進程之間的通信問題,那多麻煩。不過為了跟進程區分,就叫他們「線程(Thread)」吧”

進程一驚,要把自己拆成線程?那自己不就沒了?趕忙問道:“那我豈不是沒有存在的余地了?”

進程調度器也慌了:“要是沒了進程,我是不是也要被退休了?”

操作系統趕忙解釋道:你們誤會了,我要拆開的,是進程的執行流,進程不是包含了資源所有權和執行流嗎,資源所有權還是由進程來把控,執行流就分給幾個線程,就像這樣:

線程的來龍去脈,你了解嗎?

執行流

tobe 注:在進程模型里,進程擁有對內存、I/O 通道、I/O 設備和文件等資源的控制權,稱之為「資源所有權」。「執行流」可以看做進程在 CPU 上的執行過程(直觀一點就是高級語言里的語句)。

進程恍然大悟:“也就是說我仍然是資源的掌控者,那些線程就相當于幫我干活的小弟?”

“沒錯,而且從這種角度看,你本身還是一個單線程進程。”

聽了這么久,內存發問了:“創建進程的時候,我要保存進程 PCB ,那為了創建線程,我是不是還得創建一個 TCB(Thread Control Block)?”

“當然了,線程切換需要的信息就得存在 TCB 里面。不過你放心,TCB 要比 PCB 小得多,所以線程切換會比進程切換快很多。”

線程的來龍去脈,你了解嗎?

多線程進程模型

大家聽完,紛紛覺得「線程」這個模型完美的解決了當前的問題,說道:“要不我們現在就在操作系統里添上線程模型吧,早點解決進程的問題。”

但是操作系統面露難色,說:“線程模型只是我們的一個假想,貿然加進來的話,可能會出問題,系統崩潰可就不好了,還是要以穩定為主。。。但這個模型還是得試的,要不我們先創建一個線程庫,靠一個用戶級別的應用程序——線程調度器來管理這些線程吧。”

進程不解的問:“可是這樣的話,我還是被分配在一個單獨的核心上啊,即使是多線程,也只能在單核上運行。再說了,如果這些線程里有一個被阻塞,在你看來,是整個進程阻塞了,那其他線程,即使是就緒態,也得不到 CPU 資源。”

操作系統仔細想了下,說:“沒辦法,用戶級線程確實有這兩個缺點,但相比起讓內核來實現線程,用戶級線程也有他的好處——線程切換不需要我進行狀態轉換(從用戶態到內核態),開銷小,除此之外,線程庫可以有多個調度算法,能夠為應用程序量身定做調度算法。”

tobe 注:有一種解決線程阻塞的方案叫 jacketing,他可以把一個產生阻塞的系統調用轉化成一個非阻塞的系統調用,比如說,不直接調用系統級的 I/O 例程,而是讓線程調用應用級的 I/O jacket 例程,這個 jacket 例程會檢查 I/O 設備是否忙,如果忙的話,就不執行 I/O 操作,轉而調度其他線程,避免了因等待 I/O 設備而造成的進程阻塞。

用戶級線程很快投入使用,Linux系統中的 pthread(POSIX thread)庫可以說是大獲成功,操作系統做出了一項重大決定——支持內核級線程。

內核級線程解決了進程并行的問題,除此之外,由于內核看得到線程的存在,一個線程阻塞了,位于同一個進程中的其它線程仍然能夠運行。

線程的來龍去脈,你了解嗎?

用戶級線程和內核級線程

進程表示現在自己十分開心。

 

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2019-08-02 08:59:21

Token認證服務器

2018-02-24 13:21:02

2013-10-25 13:18:20

搜狗瀏覽器

2021-06-01 10:49:22

線程池Java開發

2021-06-03 14:23:57

線程線程池JAVA

2022-06-07 07:37:40

線程進程開發

2018-11-21 09:32:10

IT云計算

2012-02-06 13:52:33

JavaScript

2012-09-27 10:24:22

監控機房

2022-07-26 00:00:22

HTAP系統數據庫

2012-09-06 17:54:28

2014-04-17 16:42:03

DevOps

2023-07-26 07:41:53

Python線程狀態

2025-01-03 08:09:15

2010-09-07 14:54:01

PPP幀中繼

2023-11-09 08:22:38

2010-09-06 14:03:06

PPP身份認證

2021-01-15 07:44:21

SQL注入攻擊黑客

2021-11-09 09:48:13

Logging python模塊

2018-02-02 10:56:19

屏蔽機房擴建
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 超级乱淫av片免费播放 | 久久久天堂| 亚洲视频国产 | 国产精品久久久久永久免费观看 | 日韩三级在线观看 | 免费的一级视频 | 无码日韩精品一区二区免费 | 久热精品在线观看视频 | 久久人人国产 | 欧美 日韩 国产 成人 | 亚洲少妇综合网 | 美女视频. | 国产9久| 中文字幕一区二区三区精彩视频 | 奇米影视首页 | 日本精品一区 | 综合在线视频 | 欧美阿v | а天堂中文最新一区二区三区 | 特级毛片爽www免费版 | 午夜一级大片 | 国产精品欧美一区二区 | 91热在线| 日韩欧美高清 | 欧美精品一区在线 | 国产精品久久久久久久久久久久久 | 巨大荫蒂视频欧美另类大 | 久久国产精品免费一区二区三区 | 亚洲国产精品福利 | 亚洲日韩视频 | 久久久久国产一区二区三区四区 | 欧美男人天堂 | 91视频91 | 日本成人区 | 美女日批免费视频 | 国产精品夜夜春夜夜爽久久电影 | 国产高清精品一区二区三区 | 888久久久 | 免费看一区二区三区 | 精品免费国产一区二区三区四区介绍 | 久色视频在线观看 |