iOS —— 多線程基礎

来源:http://www.cnblogs.com/touxinliang/archive/2017/04/18/6726432.html
-Advertisement-
Play Games

一、進程 進程可以理解為一個應用程式;比如說打開 QQ,那麼在記憶體中就會為 QQ 分配一塊進程;打開微信,那麼在記憶體中就會為 微信 分配一塊進程;並且進程之間是相互獨立的 二、線程 1. 基本概念 線程是進程的基本單元(可以理解為一個進程中的各個操作);比如說 QQ,其中的很多操作,比如說發送文件, ...


一、進程

進程可以理解為一個應用程式;比如說打開 QQ,那麼在記憶體中就會為 QQ 分配一塊進程;打開微信,那麼在記憶體中就會為 微信 分配一塊進程;並且進程之間是相互獨立的

進程在記憶體中的說明

 

 

二、線程

1. 基本概念

線程是進程的基本單元(可以理解為一個進程中的各個操作);比如說 QQ,其中的很多操作,比如說發送文件,下載圖片等,這些都是子線程

例如 xcode 進程中的線程

線程說明

 

一個進程最少有一個線程,稱為主線程

進程的各個操作都是在主線程或子線程中完成的

 

2. 串列、並行

串列和並行都是針對線程而言的

串列 
串列是指一個線程中的任務一個一個執行,即上一個任務執行完,下一個任務才能繼續;即在同一時間內,只能執行一個任務

如圖 

線程說明

 

可以看出,串列的耗時是所有任務的總和

並行 
並行是指一個線程中的任務可以同時進行;即在同一時間內可以進行多個任務

如圖

並行說明

 

3. 多線程

1)概念

因為每個進程最少都一個線程(主線程),在主線程中還可以創建多個子線程,並且主線程和子線程中的任務是互不幹涉的;

也就是說,在同一時間內,可以同時進行主線程和子線程中的任務

如圖

多線程說明

 

2)原理

a. 單核操作系統

在單核操作系統上,因為在同一時間內只能運行一個任務,那如何實現多線程呢??

系統會為每一個線程指定一個確定的執行時間,當然這個時間很短,然後在各個線程之間做切換(調度),以此來達到多線程

如圖

單核操作系統的多線程

 

可以看出,單核操作系統的多線程實際上還是串列的,只不過在時間很短的情況下進行線程之間的切換,所以看起來就好像是多線程了

 

b. 多核操作系統 
在多核操作系統上,在同一時間內可以運行多個任務,所以很容易實現多線程,並且是真正的多線程

如圖 

多核操作系統的多線程

 

 

3)優缺點

a. 優點 

  能提高 CPU 的利用率和執行效率

b. 缺點 

  消耗記憶體(創建一個新的線程會消耗一定的記憶體) 

  如果開啟的線程過多,那麼 CPU 的開銷就越大

 

4)iOS 的多線程

iOS 應用在啟動後,只會開啟一條線程(主線程,也稱 UI 線程)

通常,在 主線程 中做一些不耗時的工作;例如 刷新 UI 界面、監控事件等


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 任務一:零基礎HTML編碼 課程概述 作業提交截止時間:04-24 重要說明 百度前端技術學院的課程任務是由百度前端工程師專為對前端不同掌握程度的同學設計。我們儘力保證課程內容的質量以及學習難度的合理性,但即使如此,真正決定課程效果的,還是你的每一次思考和實踐。 課程多數題目的解決方案都不是唯一的, ...
  • 用 js 的 selection range 方法操作選擇區域內容和圖片,實現選擇、刪除等操作。 ...
  • 1.前臺javascript 1.在提交的js中這樣寫 document.form1.username.value=encode64(document.form1.username.value); document.form1.password.value=encode64(document.for... ...
  • 引子:用javascript給元素綁定事件,我們可以用addEventListener這個方法,然而這個方法有相容問題,比如在IE瀏覽器上面就無效,在IE上面要用attachEvent這個方法 一、addEventListener和attachEvent的區別: 1、addEventListener ...
  • git:https://github.com/reg21st/vue2 management platform 訪問:https://reg21st.github.io/vue2 management platform 概述: 最近學習vue2.0和elementUI的使用,在各種文檔的幫助下,嘗試 ...
  • 語句 (建議)每條語句放在不同的行上並加上分號 first cnblogs;second cnblogs; 註釋 (建議)用"//" 來註釋單行,用"/*"註釋多行 //有註釋是好事 /*有註釋是好事 有註釋是好事 有註釋是好事 有註釋是好事*/ 變數 JS語法不允許變數名中包含空格或標點符號(美元 ...
  • 本文也同步發表在我的公眾號“我的天空” 上一期我們已經介紹了閉包,由於閉包可以延長函數內部的變數的生存周期,因此我們可以將不需要暴露在全局的變數封裝成函數的內部變數,從而避免代碼污染。 譬如要實現一個簡單的累加器,為了保存每次累加的結果,因此聲明瞭一個全局變數total,代碼如下: var tota ...
  • 文字溢出隱藏 如果你觀察過浮動元素,你會發現這樣一個事實,當前一個元素將寬度占滿以後,後一個元素就會往下掉,如下所示 代碼如下 也許在你眼裡這是個再正常不過的現象,不過有人卻將這個現象用在了實現文本溢出隱藏上,我們來看看他們是怎麼實現的。 先來看看它的效果,如下 實現這個效果的原理就是先將省略號通過 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...