自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

異步編程到底在說(shuō)啥?

開發(fā) 前端
如果是在單核系統(tǒng)下,CPU會(huì)不斷在處理文件線程和A函數(shù)線程間切換,看上去這兩個(gè)線程就好像在同時(shí)運(yùn)行,但如果是在多核系統(tǒng)下,這兩個(gè)線程可以真正的并行起來(lái)。

[[432994]]

大家好,我是小風(fēng)哥。

有的同學(xué)可能注意到了最近更新頻率有點(diǎn)慢,除了工作外小風(fēng)哥也確實(shí)在忙些其它事情,這里先賣個(gè)關(guān)子,過(guò)段時(shí)間會(huì)和大家匯報(bào)的圖片。

之前很多同學(xué)在微信上問(wèn)能不能講講異步編程是怎么一回事兒,今天就和大家簡(jiǎn)單聊一聊這個(gè)話題。

我們以函數(shù)調(diào)用為例,假設(shè)有這樣的代碼:

  1. void B() { 
  2.   lines = read(filename); 
  3.   sum(lines); 
  4.  
  5. void A() { 
  6.   ... 
  7.   B(); 
  8.   ... 

代碼非常簡(jiǎn)單,B函數(shù)讀取一個(gè)文件,文件里保存的是一行行數(shù)據(jù),然后加和,A函數(shù)中的某個(gè)位置調(diào)用B函數(shù)。

此時(shí),我們說(shuō)這是同步調(diào)用,因?yàn)锳函數(shù)后續(xù)代碼必須等待B函數(shù)處理完文件才能繼續(xù)執(zhí)行。

隨著業(yè)務(wù)不斷發(fā)展,B函數(shù)處理的文件越來(lái)越龐大,此時(shí)處理一次文件耗時(shí)2小時(shí),假設(shè)A函數(shù)后還有一行重要的代碼:

  1. void A() { 
  2.   ... 
  3.   B(); 
  4.   something_important(); 
  5.   ... 

這就意味著調(diào)用B函數(shù)后需要等待2個(gè)小時(shí)才能執(zhí)行到something_important這行代碼,而something_important函數(shù)對(duì)時(shí)間要求非??量?,該怎樣改進(jìn)呢?

其實(shí)很簡(jiǎn)單,我們可以在B函數(shù)內(nèi)部創(chuàng)建一個(gè)線程,在線程中處理文件:

  1. void handle_file() { 
  2.   lines = read(filename); 
  3.   sum(lines); 
  4.  
  5. void B() { 
  6.   thread t(handle_file); 
  7.  
  8. void A() { 
  9.   ... 
  10.   B(); 
  11.   something_important(); 
  12.   ... 

這樣B函數(shù)被調(diào)用后創(chuàng)建完線程即可立即返回,緊接著開始執(zhí)行something_important這行代碼,CPU在執(zhí)行something_important這行代碼時(shí)可能文件還沒(méi)有開始處理,這樣函數(shù)A不再依賴于文件處理,這時(shí)我們說(shuō)函數(shù)B函數(shù)就是異步調(diào)用的,函數(shù)A異步于文件處理。

如果是在單核系統(tǒng)下,CPU會(huì)不斷在處理文件線程和A函數(shù)線程間切換,看上去這兩個(gè)線程就好像在同時(shí)運(yùn)行,但如果是在多核系統(tǒng)下,這兩個(gè)線程可以真正的并行起來(lái)。

在編程語(yǔ)境下,異步往往和線程進(jìn)程等相關(guān)。

最后舉一個(gè)例子。

同步就好比你排隊(duì)去自助售票機(jī)取電影票(話說(shuō)小風(fēng)哥已經(jīng)很久很久沒(méi)有去電影院看電影了),你必須排隊(duì)等待前一個(gè)人取完電影票才能到你,你不能在前一個(gè)取票的過(guò)程中取自己的票,這時(shí)我們說(shuō)取電影票時(shí)你和前一個(gè)人是同步的。

而異步就好比去吃大餐,你在座位上看菜單點(diǎn)菜,其它人也可以點(diǎn)菜,你不需要等待其它人吃完飯才能下單,這時(shí)我們說(shuō)你點(diǎn)菜和其它人吃飯是異步的。

本文轉(zhuǎn)載自微信公眾號(hào)「碼農(nóng)的荒島求生」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系碼農(nóng)的荒島求生公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 碼農(nóng)的荒島求生
相關(guān)推薦

2021-01-27 05:25:44

Go語(yǔ)言函數(shù)

2020-11-27 19:08:51

AI 數(shù)據(jù)人工智能

2022-04-19 15:33:53

數(shù)據(jù)模型

2024-11-05 09:32:47

2015-06-30 14:33:52

物聯(lián)網(wǎng)

2017-03-16 14:31:11

2015-09-02 09:56:33

大數(shù)據(jù)

2016-04-05 10:21:25

大數(shù)據(jù)元數(shù)據(jù)數(shù)據(jù)分析

2013-04-01 15:38:54

異步編程異步編程模型

2019-07-17 10:10:34

Netty版本Event

2023-06-11 17:02:24

數(shù)字化轉(zhuǎn)型數(shù)字經(jīng)濟(jì)

2021-11-16 23:07:59

手機(jī)性能技術(shù)

2020-11-02 12:47:56

性能優(yōu)化

2020-03-09 16:43:06

腳本語(yǔ)言瀏覽器JavaScript

2010-08-09 09:09:36

Linux與BSD的區(qū)

2019-05-28 09:19:57

5G華為美國(guó)

2020-10-08 14:45:36

Windows XPWindows微軟

2023-09-12 16:36:39

操作系統(tǒng)CPU周期性

2012-04-27 10:13:08

云計(jì)算數(shù)據(jù)IaaS

2015-08-26 08:41:19

物聯(lián)網(wǎng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)