<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                轉載于翟乃玉大神以下的博客? [http://blog.csdn.net/u013357243/article/details/45898443](http://blog.csdn.net/u013357243/article/details/45898443) [http://blog.csdn.net/u013357243/article/details/45912585](http://blog.csdn.net/u013357243/article/details/45912585) ## 一:進程和線程 ### 1:什么是進程 進程是指在系統中正在運行的一個應用程序? 每個進程之間是獨立的,每個進程均運行在其專用且受保護的內存空間內。 ![這里寫圖片描述](https://box.kancloud.cn/2016-03-07_56dd400e02de9.jpg "") ? 比如同時打開QQ、Xcode,系統就會分別啟動2個進程。 通過“活動監視器”可以查看Mac系統中所開啟的進程 ![](https://box.kancloud.cn/2016-03-07_56dd400e1cce3.jpg) ### 2:什么是線程 1個進程要想執行任務,必須得有線程(每1個進程至少要有1條線程——主線程)。? 線程是進程的基本執行單元,一個進程(程序)的所有任務都在線程中執行。 比如使用酷狗播放音樂、使用迅雷下載電影,都需要在線程中執行。 ![這里寫圖片描述](https://box.kancloud.cn/2016-03-07_56dd400e3c491.jpg "") ### 3:線程的串行 1個線程中任務的執行是串行的? 如果要在1個線程中執行多個任務,那么只能一個一個地按順序執行這些任務? 也就是說,在同一時間內,1個線程只能執行1個任務 比如在1個線程中下載3個文件(分別是文件A、文件B、文件C) ![這里寫圖片描述](https://box.kancloud.cn/2016-03-07_56dd400e5252d.jpg "") ## 二:多線程 ### 1:什么是多線程 1個進程中可以開啟多條線程,每條線程可以并行(同時)執行不同的任務? 進程 ? 車間,線程 ? 車間工人? 多線程技術可以提高程序的執行效率 比如同時開啟3條線程分別下載3個文件(分別是文件A、文件B、文件C) ![這里寫圖片描述](https://box.kancloud.cn/2016-03-07_56dd400e67c27.jpg "") ### 2:多線程的優缺點 #### (1)多線程的優點: a:能適當提高程序的執行效率。? b:能適當提高資源利用率(CPU、內存利用率)。 #### (2)多線程的缺點? a:開啟線程需要占用一定的內存空間(默認情況下,主線程占用1M,子線程占用512KB),如果開啟大量的線程,會占用大量的內存空間,降低程序的性能。? b:線程越多,CPU在調度線程上的開銷就越大。? c:程序設計更加復雜:比如線程之間的通信、多線程的數據共享。 ### 3:多線程安全隱患 #### (1):資源共享 一塊資源可能會被多個線程共享,也就是多個線程可能會訪問同一塊資源 比如多個線程訪問同一個對象、同一個變量、同一個文件 當多個線程訪問同一塊資源時,很容易引發數據錯亂和數據安全問題。 比如銀行存取問題: ![這里寫圖片描述](https://box.kancloud.cn/2016-03-07_56dd400e8058f.jpg "") 賣票問題: ![這里寫圖片描述](https://box.kancloud.cn/2016-03-07_56dd400e9b144.jpg "") 分析: ![這里寫圖片描述](https://box.kancloud.cn/2016-03-07_56dd400eb0ee6.jpg "") ### 加鎖 這里加一個互斥鎖(同步鎖)就可以了,學過java的都應該了解鎖的概念吧。我就不多解釋了,這方面博客一堆堆的。 ![這里寫圖片描述](https://box.kancloud.cn/2016-03-07_56dd400ec41d9.jpg "") 互斥鎖使用格式? @synchronized(鎖對象) { // 需要鎖定的代碼 }? 注意:鎖定1份代碼只用1把鎖,用多把鎖是無效的 互斥鎖的優缺點? 優點:能有效防止因多線程搶奪資源造成的數據安全問題? 缺點:需要消耗大量的CPU資源 互斥鎖的使用前提:多條線程搶奪同一塊資源 相關專業術語:線程同步? 線程同步的意思是:多條線程在同一條線上執行(按順序地執行任務)? 互斥鎖,就是使用了線程同步技術 ~~~ -(void)saleTicket{ while (1) { @synchronized(self) { int count = self.leftTicketCount; if (count>0) { [NSThread sleepForTimeInterval:0.05]; self.leftTicketCount = count - 1; NSLog(@"%@窗口賣出一張票,還剩%d張票",[NSThread currentThread].name,self.leftTicketCount ); }else{ return; } } } } ~~~ ## 三:多線程在iOS開發中的應用 ### 1:什么是主線程 一個iOS程序運行后,默認會開啟1條線程,稱為“主線程”或“UI線程”。 (1)主線程的主要作用? a:顯示\刷新UI界面。? b:處理UI事件(比如點擊事件、滾動事件、拖拽事件等)。 (2)主線程的使用注意? a:別將比較耗時的操作放到主線程中。? b:耗時操作會卡住主線程,嚴重影響UI的流暢度,給用戶一種“卡”的壞體驗。 c:不要同時開太多的線程(1~3條線程即可,不要超過5條) ### 舉個栗子 如果將耗時操作放在主線程,假設某些耗時操作需要耗挺長時間的,然后我們操作了,在主線程中她就卡了10秒,這用戶體驗。。。。弱爆了。 代碼: ~~~ - (IBAction)btnClick { // 1.獲得當前的線程 NSThread *current = [NSThread currentThread]; // 2.執行一些耗時操作 for (int i = 0; i<10000; i++) { // 3.輸出線程 NSLog(@"%@", current); } } ~~~ ![這里寫圖片描述](https://box.kancloud.cn/2016-03-07_56dd400ee91e4.jpg "") 當前執行分析:等待主線程串行執行。 ![這里寫圖片描述](https://box.kancloud.cn/2016-03-07_56dd400f50abf.jpg "") ### 解決方案: 開啟子線程。 ![這里寫圖片描述](https://box.kancloud.cn/2016-03-07_56dd400f6f84e.jpg "") ### 2:線程間通信 ### 什么叫做線程間通信 在1個進程中,線程往往不是孤立存在的,多個線程之間需要經常進行通信 **1:線程間通信的體現** 一個線程傳遞數據給另一個線程。? 在一個線程中執行完特定任務后,轉到另一個線程繼續執行任務。 **2:線程間通信常用方法** ~~~ - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait; - (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait; ~~~ ![這里寫圖片描述](https://box.kancloud.cn/2016-03-07_56dd400f9084b.jpg "") ## iOS中多線程的實現方案 ![這里寫圖片描述](https://box.kancloud.cn/2016-03-07_56dd400fa63d9.jpg "")
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看