資料介紹
很多人學線程,迷迷糊糊;很多人問線程,有所期待;也有很多人寫線程,分享認知給正在努力的年輕人,呦,呦,呦呦。但是,你真的了解線程么?你真的會用多線程么?你真的學明白,問明白,寫明白了么?不管你明不明白,反正我不明白,但是,沒準,你看完,你就明白了。
?
前言
就不得不提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次閱讀
下載排行
本周
- 1IP6823 支持 qi 認證的無線充電發射控制 SOC
- 1.01 MB | 1次下載 | 免費
- 2IP6824? 全集成QI?無線充電發射控制SOC
- 1.22 MB | 1次下載 | 免費
- 3帶注入電流控制的1.8V通用SP8T-Z和2個SP4T-Z模擬開關
- 847.62KB | 次下載 | 免費
- 4PESD18VY1BBIF保護二極管規格書
- 4.56MB | 次下載 | 免費
- 574HC4050緩沖器規格書
- 217.58KB | 次下載 | 免費
- 674HC193;74HC7193二進制加減計數器規格書
- 327.93KB | 次下載 | 免費
- 774HC73-Q100雙JK觸發器規格書
- 220.85KB | 次下載 | 免費
- 8ASW3410 USB3.1高速數據開關切換規格書
- 1.39 MB | 次下載 | 免費
本月
- 1A7159和A7139射頻芯片的資料免費下載
- 0.20 MB | 55次下載 | 5 積分
- 2零死角玩轉STM32F103—指南者
- 26.78 MB | 41次下載 | 1 積分
- 3PIC12F629/675 數據手冊免費下載
- 2.38 MB | 36次下載 | 5 積分
- 4PIC16F716 數據手冊免費下載
- 2.35 MB | 18次下載 | 5 積分
- 5dsPIC33EDV64MC205電機控制開發板用戶指南
- 5.78MB | 8次下載 | 免費
- 6STC15系列常用寄存器匯總免費下載
- 1.60 MB | 7次下載 | 5 積分
- 7AN-1267: 使用ADSP-CM408F ADC控制器的電機控制反饋采樣時序
- 1.41MB | 5次下載 | 免費
- 8LP9962集成 PFC 和 和的 高壓半橋驅動的 LLC 諧振
- 3.30 MB | 4次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935124次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420063次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233088次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191367次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73813次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論
查看更多