骨灰級程式設計師總結:多進程

mysql - PHP定時通知、按時發佈怎麼做? - SegmentFault

工作線程數究竟要設置為多少 | 架構師之路

為什麼操作系統的單線程比多線程好的多?-悟空問答

架構師之路,季度精選40篇

進程和線程到底誰才是雞肋?他們的區別在哪裡?神級程序員解惑!

為什麼串口比並口快?-OSDIY的回答-悟空問答

電腦cpu的核心與線程是什麼意思?-蒙面侍衛的回答-悟空問答

一篇文章看懂Java併發和線程安全

談到多線程,我們很容易與高性能畫上等號,但是並非如此,舉個簡單的例子,從1加到100,用四個線程計算不一定比一個線程來得快。因為線程的創建和上下文切換,是一筆巨大的開銷。

阻塞非阻塞與同步異步有什麼區別?-IT老友的回答-悟空問答

你最後一段說錯了。阻塞是指,調用方必須等到下游被調用方執行完畢返回結果才能繼續執行,在被調用方未執行完畢返回結果前,上游調用方處於阻塞掛起狀態。這就是阻塞。非阻塞是下游被調用方的執行不會阻塞上游調用方,等到執行完畢,將結果通知到上游調用方,在此期間,上游調用方不會被阻塞,可以繼續做別的事,然後等著通知就可以了。

程序中的代碼段、數據段、堆、棧是怎麼回事

當你在 Linux 上啟動一個進程時會發生什麼?

php非阻塞訪問url 解析socket阻塞與非阻塞,同步與異步 - 橙虛緣空間 - CSDN博客

電腦CPU有超線程,為什麼手機CPU沒有超線程設計?-數碼偵探的回答-悟空問答

超線程技術是指,對於單一處理器核心來說來說,雖然也可以每秒鐘處理成千上萬條指令,但是在某一時刻,只能夠對一條指令進行處理,也就是單線程。超線程技術能夠把一個物理處理器在軟件層變成兩個邏輯處理器,可以使處理器在某一時刻,同步並行處理更多指令和數據,也就是超出數量(2)的線程數。


同步 & 異步

同步與異步重要的區別是在於是否阻塞,以及調用結果的通知(返回)方式。

為了便於說明,我們假定:

A:調用方

B:被調用方

調用方 & 被調用方 例子:調用方:JS主線程setTimeout()被調用方:匿名函數(被調用方有可能是一個函數,有可能是一個代碼結構,閉包,表達式等等)

同步

A阻塞調用B,阻塞調用的意思就是,在B為執行完並返回結果之前,A會一直處於被阻塞掛起的狀態,直至B返回結果,A才繼續向下執行。

異步

A非阻塞調用B,非阻塞調用的意思就是,A調用B,A不會被阻塞,在B執行完返回結果之前,A可以繼續向下執行。這個具體怎麼做到的,根據不同語言的特性有不同的實現方法,比如在JS是利用事件循環實現的。

特點分析

同步調用,調用方的繼續執行依賴於被調用方的返回結果。(需要調用方立即返回結果)

異步調用,調用方的繼續執行不依賴於被調用方的返回結果。(不需要調用方立即返回結果)

同步調用不能使用MQ

異步調用的可以使用MQ

提示:我們平常寫的普通代碼,就是自上而上的同步代碼,同步調用,一條一條的自上而下的按順序執行。

另外要注意的是,不要受編程語言所限,很多編程語言語法、調用形式不同,但是所做的事基本是相同的,編程語言只是一層外表,不要被這層外表所矇蔽了,它們最終都會轉變為一系列的系統調用,或者是有效的指令集而已。


分享到:


相關文章: