資料介紹
很多人學線程,迷迷糊糊;很多人問線程,有所期待;也有很多人寫線程,分享認知給正在努力的年輕人,呦,呦,呦呦。但是,你真的了解線程么?你真的會用多線程么?你真的學明白,問明白,寫明白了么?不管你明不明白,反正我不明白,但是,沒準,你看完,你就明白了。
?
前言
就不得不提CPU,現代的CPU有一個很重要的特性,就是時間片,每一個獲得CPU的任務只能運行一個時間片規定的時間。
其實線程對操作系統來說就是一段代碼以及運行時數據。操作系統會為每個線程保存相關的數據,當接收到來自CPU的時間片中斷事件時,就會按一定規則從這些線程中選擇一個,恢復它的運行時數據,這樣CPU就可以繼續執行這個線程了。
也就是其實就單核CUP而言,并沒有辦法實現真正意義上的并發執行,只是CPU快速地在多條線程之間調度,CPU調度線程的時間足夠快,就造成了多線程并發執行的假象。并且就單核CPU而言多線程可以解決線程阻塞的問題,但是其本身運行效率并沒有提高,多CPU的并行運算才真正解決了運行效率問題。
系統中正在運行的每一個應用程序都是一個進程,每個進程系統都會分配給它獨立的內存運行。也就是說,在iOS系統中中,每一個應用都是一個進程。
一個進程的所有任務都在線程中進行,因此每個進程至少要有一個線程,也就是主線程。那多線程其實就是一個進程開啟多條線程,讓所有任務并發執行。
多線程在一定意義上實現了進程內的資源共享,以及效率的提升。同時,在一定程度上相對獨立,它是程序執行流的最小單元,是進程中的一個實體,是執行程序最基本的單元,有自己棧和寄存器。
上面這些你是不是都知道,但是我偏要說,哦呵呵。既然我們聊線程,那我們就先從線程開刀。
Pthreads && NSThread
先來看與線程有最直接關系的一套C的API:
Pthreads
POSIX線程(POSIX threads),簡稱Pthreads,是線程的POSIX標準。該標準定義了創建和操縱線程的一整套API。在類Unix操作系統(Unix、Linux、Mac OS X等)中,都使用Pthreads作為操作系統的線程。
高大上有木有,跨平臺有木有,你沒用過有木有!下面我們來看一下這個看似牛逼但真的基本用不到的Pthreads是怎么用的:
不如我們來用Pthreads創建一個線程去執行一個任務:
記得引入頭文件`#import “pthread.h”`
-(void)pthreadsDoTask{
/*
pthread_t:線程指針
pthread_attr_t:線程屬性
pthread_mutex_t:互斥對象
pthread_mutexattr_t:互斥屬性對象
pthread_cond_t:條件變量
pthread_condattr_t:條件屬性對象
pthread_key_t:線程數據鍵
pthread_rwlock_t:讀寫鎖
//
pthread_create():創建一個線程
pthread_exit():終止當前線程
pthread_cancel():中斷另外一個線程的運行
pthread_join():阻塞當前的線程,直到另外一個線程運行結束
pthread_attr_init():初始化線程的屬性
pthread_attr_setdetachstate():設置脫離狀態的屬性(決定這個線程在終止時是否可以被結合)
pthread_attr_getdetachstate():獲取脫離狀態的屬性
pthread_attr_destroy():刪除線程的屬性
pthread_kill():向線程發送一個信號
pthread_equal(): 對兩個線程的線程標識號進行比較
pthread_detach(): 分離線程
pthread_self(): 查詢線程自身線程標識號
//
*創建線程
int pthread_create(pthread_t _Nullable * _Nonnull __restrict, //指向新建線程標識符的指針
const pthread_attr_t * _Nullable __restrict, //設置線程屬性。默認值NULL。
void * _Nullable (* _Nonnull)(void * _Nullable), //該線程運行函數的地址
void * _Nullable __restrict); //運行函數所需的參數
*返回值:
*若線程創建成功,則返回0
*若線程創建失敗,則返回出錯編號
- RT-Thread嵌入式實時操作系統詳解
- 簡析獲取單片機代碼運行時間的方法資料下載
- C語言多線程的詳細教程資料說明 10次下載
- 使用LabWindows CVI實現多線程技術在數控加工通訊中的應用資料說明 14次下載
- LabWindows CVI中的多線程技術的詳細資料說明 29次下載
- 如何使用LabWindows CVI多線程技術實現實時的數據采集詳細資料說明 34次下載
- 如何使用LabWindows CVI進行多線程技術數據采集系統的構建 26次下載
- C#多線程技術 15次下載
- iOS-多線程網絡-多圖下載案例 1次下載
- linux多線程編程技術 5次下載
- 紫金橋組態軟件新的功能_運行時組態 2次下載
- 多線程在VC++串口通信程序中的應用
- QNX環境下多線程編程
- 基于USB和多線程的實時數據采集系統
- Java的線程課程 0次下載
- 如何保證它們容器運行時的安全? 699次閱讀
- Java多線程的用法 973次閱讀
- JVM運行時數據區之堆內存 710次閱讀
- 什么是多線程 1304次閱讀
- 什么是Kubernetes容器運行時CRI 1548次閱讀
- RTOS多線程必須要MMU才行? 2478次閱讀
- 利用StopWatch監控Java代碼運行時間和分析性能 2902次閱讀
- 如何縮短Vivado的運行時間 1.4w次閱讀
- 如何避免僵尸進程,多線程的實現原理 8350次閱讀
- 如何用SysTick實現測量程序運行時間 6083次閱讀
- 多線程面試經典問答 3026次閱讀
- 多線程服務器編程模型:如何正確使用mutex 和condition variable 7300次閱讀
- 什么是多線程編程?多線程編程基礎知識 1.2w次閱讀
- mfc多線程編程實例及代碼,mfc多線程間通信介紹 1.7w次閱讀
- 多線程好還是單線程好?單線程和多線程的區別 優缺點分析 8.1w次閱讀
下載排行
本周
- 1涂鴉各WiFi模塊原理圖加PCB封裝
- 11.75 MB | 76次下載 | 1 積分
- 2錦銳科技CA51F2 SDK開發包
- 24.06 MB | 29次下載 | 1 積分
- 3錦銳CA51F005 SDK開發包
- 19.47 MB | 3次下載 | 1 積分
- 4蘋果iphone 11電路原理圖
- 4.98 MB | 3次下載 | 2 積分
- 5基礎模擬電子電路
- 3.80 MB | 3次下載 | 1 積分
- 6RA-Eco-RA6M4-100PIN-V1.0開發板資料
- 34.89 MB | 1次下載 | 免費
- 7STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4編程手冊
- 3.32 MB | 1次下載 | 免費
- 8聯想A820t手機維修圖紙包括主板原理圖 尾板原理圖 點位圖
- 0.62 MB | 次下載 | 5 積分
本月
- 1AI智能眼鏡產業鏈分析
- 4.43 MB | 383次下載 | 免費
- 2蘇泊爾電磁爐線路的電路原理圖資料合集
- 2.02 MB | 296次下載 | 5 積分
- 3貼片三極管上的印字與真實名稱的對照表詳細說明
- 0.50 MB | 94次下載 | 1 積分
- 4長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
- 0.46 MB | 91次下載 | 5 積分
- 5涂鴉各WiFi模塊原理圖加PCB封裝
- 11.75 MB | 76次下載 | 1 積分
- 6錦銳科技CA51F2 SDK開發包
- 24.06 MB | 29次下載 | 1 積分
- 7AO4803A雙P通道增強型場效應晶體管的數據手冊
- 0.11 MB | 28次下載 | 2 積分
- 8長虹液晶彩電LS29機芯的技術資料說明
- 3.42 MB | 16次下載 | 2 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191388次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183342次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81588次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73815次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論