ios高級開發之多線程(一)

1.概念:

多線程(multithreading)到底是什么呢,它是指在軟件或者硬件上實現多個線程并發執行的技術。具有多線程能力的計算機因有硬件的支持,而能夠在同一時間執行多個線程,進而提升整體處理性能。在一個程序中,這些獨立運行的程序片段,叫做線程(thread)。利用它編程的概念就叫做多線程處理。

2.多線程的原理:

對于單核的cpu而言,同一時間,CPU實際只能處理一個線程,也就是說,在某一時刻,實際只有一個線程在執行。所以對于在單核的CPU,執行多線程。實際上是在不同的線程之間來回切換。造成多個線程同時執行的現象。如果同時啟動的線程非常多的話,就會對CPU資源浪費。

而對于多核的CPU而言,才是真正的在某一個時刻同時執行。比如雙核,雙線程。

3.關于線程與進程

每一個正在系統上運行的程序都是一個進程,一個進程包含一個或多個線程。進程可能是整個程序或者部分程序程序的動態執行。線程是一組執行的集合,或者是程序的特殊段,它可以在程序里獨立執行,也可以把它理解為代碼運行的上下文。所以線程是輕量級的進程。它負責在單個程序里執行多任務。通常是由操作系統來負責多個線程的調度和執行。

線程是程序里單一的順序控制流程,在單個程序中同時運行多個線程完成不同的工作,稱為多線程。

線程和進程的區別在于:子進程和父進程有不同的代碼和數據空間。而多個線程則共享數據空間。每個線程都有自己的執行堆棧和程序計數器為其執行上下文。多線程主要是為了節約CPU時間,發揮利用,根據具體情況而定。線程的運行中需要使用計算機的內存資源和CPU.

4.多線程的優缺點

優點;

1.可以把耗時較長的任務放到后臺去處理。比如,下載圖片。

2.可以有更好的用戶交互。比如進度條的顯示。

3.程序的運行速度可能加快。

缺點:

1.當線程數量較多的時候,會占用大量的CPU資源。而且執行的時間只慢不快。

2.開啟一個線程需要占用一定的內存空間。默認情況下,是512K,如果開啟大量的線程,會占用大量的內存空間,降低程序的性能。更多的線程需要更多的內存空間。

3.程序設計更加復雜,比如線程間的通信,多線程的數據共享,可能會給程序帶來更多的BUG,因此要小心使用。

4.通常塊模型的數據在多個線程間共享的,需要進行合理的管理。

既然有優點也有缺點,那么為什么我們要學習和使用多線程編程技術呢?

一個個的按順序執行程序是無法忍受的,比如你顯示一個列表。里面很多人的頭像,信息,但是下載頭像需要大量的時間,你如果等待頭像下載完畢,列表才能顯示,是非常痛苦的,尤其在移動APP里,一切以用戶的體驗為第一重要任務。

在IOS開發里,在一個程序運行之后,默認開啟一個線程,就是大家常說的“主線程”,或者“UI線程”。主線程一般用來刷新UI界面,處理UI事件。(比如點擊,滾動,拖拽)等等。

在主線程的使用中要注意,不要將那些耗時的操作放到主線程中。

耗時操作會卡住主線程。嚴重影響用戶體驗。

?

轉載于:https://www.cnblogs.com/howlaa/p/10608916.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387144.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387144.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387144.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

v-if的簡單應用

<span v-if"item.status0"> 項目狀態&#xff1a;未提交 </span> <span v-if"item.status1"> 項目狀態&#xff1a;審批中 </span> <span v-if"item.status2"> 項目狀態&#xff1a;審批退回 </span> <s…

05 MapReduce應用案例02

6、統計每個月份中&#xff0c;最高的三個溫度。 輸入格式&#xff1a;年月日 空格 時分秒 TAB 溫度 inputfile: 1949-10-01 14:21:02 34c 1949-10-02 14:01:02 36c 1950-01-01 11:21:02 32c 1950-10-01 12:21:02 37c 1951-12-01 12:21:02 23c 1950-10-…

05 MapReduce應用案例03

8、PageRank Page-rank源于Google&#xff0c;用于衡量特定網頁相對于搜索引擎索引中的其他網頁而言的重要程度。 Page-rank實現了將鏈接價值概念作為排名因素。 算法原理 – 入鏈 投票 ? Page-rank 讓鏈接來“ 投票 “ ,到一個頁面的超鏈接相當于對該頁投一票。 – 入…

利用微信的weui框架上傳、預覽和刪除圖片

jQuery WeUI 是專為微信公眾賬號開發而設計的一個框架&#xff0c;jQuery WeUI的官網&#xff1a;http://jqweui.com/ 需求&#xff1a;需要在微信公眾號網頁添加上傳圖片功能 技術選型&#xff1a;實現上傳圖片功能可選百度的WebUploader、餓了么的Element和微信的jQuery WeUI…

【轉】Java Socket編程基礎及深入講解

原文&#xff1a;https://www.cnblogs.com/yiwangzhibujian/p/7107785.html#q2.3.3 Socket是Java網絡編程的基礎&#xff0c;了解還是有好處的&#xff0c; 這篇文章主要講解Socket的基礎編程。Socket用在哪呢&#xff0c;主要用在進程間&#xff0c;網絡間通信。本篇比較長&am…

使用 vue-i18n 切換中英文

使用 vue-i18n 切換中英文vue-i18n 倉庫地址&#xff1a;https://github.com/kazupon/vue-i18n兼容性&#xff1a;支持 Vue.js 2.x 以上版本安裝方法&#xff1a;&#xff08;此處只演示 npm&#xff09;npm install vue-i18n使用方法&#xff1a;1、在 main.js 中引入 vue-i18…

ZooKeeper數據模型

Zookeeper的數據模型 層次化的目錄結構&#xff0c;命名符合常規文件系統規范&#xff08;Linux&#xff09; 每個節點在zookeeper中叫做znode,并且其有一個唯一的路徑標識 節點Znode可以包含數據和子節點(即子目錄)&#xff0c;但是EPHEMERAL類型的節點不能有子節點 Znod…

堆疊條形圖

堆疊條形圖 import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import matplotlib.dates as mdates#解決能顯示中文 mpl.rcParams[font.sans-serif][SimHei] #指定默認字體 SimHei為黑體 mpl.rcParams[axes.unicode_minus]Fal…

spring boot 服務器常用

ps aux|grep tgcwll /opt/nginx/html sudo cp -r /tmp/tgcw/dist/* /opt/nginx/html/design sudo cp -r /tmp/tgcw/dist/* /opt/nginx/html springboot 啟動nohup java -jar tgcw-service-usermanagement-0.0.1-SNAPSHOT.jar --spring.profiles.activedemo > /dev/null 2&g…

PHP數組 轉 對象/對象 轉 數組

/*** 數組 轉 對象** param array $arr 數組* return object*/ function array_to_object($arr) {if (gettype($arr) ! array) {return;}foreach ($arr as $k > $v) {if (gettype($v) array || getType($v) object) {$arr[$k] (object)array_to_object($v);}}return (obj…

ZooKeeper編程01--RMI服務的多服務器管理

服務器端與客戶端都要用到&#xff1a; public interface ZkInfo {String ZK_CONNECTION_STRING "192.168.1.201:2181,192.168.1.202:2181,192.168.1.203:2181";int ZK_SESSION_TIMEOUT 5000;String ZK_REGISTRY_PATH "/registry";String ZK_PROVIDER_…

org.activiti.engine.ActivitiOptimisticLockingException updated by another transaction concurrently

org.activiti.engine.ActivitiOptimisticLockingException: Task[id5905010, name審核(市場部)] was updated by another transaction concurrentlyat org.activiti.engine.impl.db.DbSqlSession.flushUpdates(DbSqlSession.java:872)at org.activiti.engine.impl.db.DbSqlSess…

DataTable不能通過已刪除的行訪問該行的信息解決方法

使用dt.Rows[0]["name", DataRowVersion.Original]可以獲取轉載于:https://www.cnblogs.com/heyiping/p/10616640.html

ZooKeeper編程02--多線程的分佈式鎖

面向過程版&#xff1a; package distributedLockProcess;import java.util.Collections; import java.util.List; import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; import org.apache.zoo…

01 Python變量和數據類型

Python變量和數據類型 1 數據類型 計算機&#xff0c;顧名思義就是可以做數學計算的機器&#xff0c;因此&#xff0c;計算機程序理所當然也可以處理各種數值。 但是&#xff0c;計算機能處理的遠不止數值&#xff0c;還可以處理文本、圖形、音頻、視頻、網頁等各種各樣的數…

初識Python-1

1&#xff0c;計算機基礎。 2&#xff0c;python歷史。 宏觀上&#xff1a;python2 與 python3 區別&#xff1a; python2 源碼不標準&#xff0c;混亂&#xff0c;重復代碼太多&#xff0c; python3 統一 標準&#xff0c;去除重復代碼。 3&#xff0c;python的環境。 編譯型&…

02 List、Tuple、Dict、Set

List 線性表 創建List&#xff1a; >>> classmates [Michael, Bob, Tracy] >>> L [Michael, 100, True] #可以在list中包含各種類型的數據 >>> empty_list [] #空List 按索引訪問List&#xff1a; >>> print L[0] #索引從0開始…

Jenkins的一些代碼

pipeline {agent anyenvironment { def ITEMNAME "erp"def DESTPATH "/home/ops/testpipe"def codePATH"/var/lib/jenkins/workspace/test_pipeline"}stages { stage(代碼拉取){steps {echo "checkout from ${ITEMNAME}"git url:…

利用layui前端框架實現對不同文件夾的多文件上傳

利用layui前端框架實現對不同文件夾的多文件上傳 問題場景&#xff1a; 普通的input標簽實現多文件上傳時&#xff0c;只能對同一個文件夾下的多個文件進行上傳&#xff0c;如果要同時上傳兩個或多個文件夾下的文件&#xff0c;是無法實現的。這篇文章就是利用layui中的插件&am…

ps、grep和kill聯合使用殺掉進程

ps、grep和kill聯合使用殺掉進程例如要殺掉hello這個進程&#xff0c;使用下面這個命令就能直接實現。ps -ef |grep hello |awk {print $2}|xargs kill -9這里是輸出ps -ef |grep hello 結果的第二列的內容然后通過xargs傳遞給kill -9,其實第二列內容就是hello的進程號&#xf…