隊列與任務的理解(多線程)
線程的定義:
一個執行中的程序為一個進程 一個進程一般在一個線程上執行 除非進程的代碼中申請了另一條線程來執行異步操作 否則一般來說進程都只在一個線程中執行
計算機並沒有真正意義上的多線程 實際上CPU只是將極短的時間分配給每個進程所以人感覺上就是多個程序同時運行
OK
現在說隊列 隊列分兩種 一種是串行隊列 一種是並行隊列 串行隊列就好比一條軌道(單線程) 軌道上的車必須一輛一輛地進入而且先入先出 不能分岔超越 並行隊列正好相反 可以想像成多條道路(多線程)通向同一個地點 進入的車可以通過不同的路線到終點 路線之間地位是平等的
OK
再說一下同步異步 同步可以想像成一連串任務 每個任務有編號(或者理解成優先級) 任務必須按編號(或優先級)完成 任務1後進行任務2 任務2完成後才能進行任務3 一步接一步 不能逾越 異步則相反 每個任務的編號(或優先級)都一樣 任務之間不需要按順序完成 任務1可以在任務2未完成的時候繼續進行任務3
———————————————————————
根據上述定義理解下列例子
同步串行隊列
必須一個接一個任務完成 有一個固定的順序而且可以控制
同步並行隊列
雖然有多條線程通向終點 但是因為同步任務必須按順序完成才能進行下一個任務 所以就算有三個任務和有三條線程 每個必須等到線程一裡面的任務一完成才能進行線程二裡面的任務二 在任務二完成後才能進行線程三裡面的任務三 所以實際上和同步串行沒有分別 反而因為多開了線程而浪費了資源
異步串行隊列
一條線程上 每個任務不需按順序完成 所以當一個任務為異步時 自動或手動開闢一條線程來執行這個任務從而達到不阻塞原線程的效果
異步並行隊列
多個不按順序的任務進入多條線程 順序不能確定 任務完成的先後無法預知 先後取決於任務的複雜程度 可想像成多輛汽車要到達同一地點 然後每輛汽車各自行一條通道 所以誰先到誰後到完全看汽車的速度和性能 無法手工干預
以上就是串行 並行 同步 異步的解釋和搭配 如有跟深層理解將不定期補充