熱線電話:0755-23712116
郵箱:contact@shuangyi-tech.com
地址:深圳市寶安區(qū)沙井街道后亭茅洲山工業(yè)園工業(yè)大廈全至科技創(chuàng)新園科創(chuàng)大廈2層2A
首先還是那個問題,我們?yōu)槭裁葱枰嗑€程?單線程編程做的好好的,又簡單又好用,為什么要弄出一個多線程編程呢?難道前人是為了設計而設計了個多線程的?顯然這是不可能,那么是什么原因呢?用最精煉的語言概括無非就是以下兩個原因。
效率和用戶體驗
效率主要體現(xiàn)在服務端,用戶體驗更多是體現(xiàn)在客戶端,當然肯定不是說效率只體現(xiàn)在服務端,用戶體驗只體現(xiàn)在客戶端,無論是效率還是用戶體驗在服務端和客戶端上都會體現(xiàn),只是說側(cè)重點不一樣,這一點大家要注意下。
那么多線程到底是什么呢?在計算機術(shù)語中也可以叫并發(fā),指的是在單個系統(tǒng)里同時執(zhí)行多個獨立的活動,而不是順序的一個接一個的執(zhí)行。假設這樣的一個場景,你在一個軟件中要導入100萬條的數(shù)據(jù),如果你用單線程,那么你在導入的過程中,你只能等待它導完,其他什么事你都做不了,因為軟件會卡在那里,之所以卡在那里,是因為軟件里面在傳輸數(shù)據(jù),而你是用單線程,數(shù)據(jù)還沒傳輸完,下面的代碼無法執(zhí)行。所以這個時候你必須用多線程,開啟一個線程來導入這100萬條數(shù)據(jù),這樣才能保證在導入數(shù)據(jù)的同時,你還可以在軟件上做其他操作。
大家要注意一點,在單核CPU上面,并發(fā)并不是真正的并發(fā),而是通過時間片輪詢的方式來看起來像是并發(fā),真正的并發(fā)應該是在多核CPU上面。
說完了多線程的相關概念,我們來說一說多線程編程。在早期C++11之前,C++在語言級別上并不支持多線程,要想實現(xiàn)多線程,必須通過第三方庫或者調(diào)用平臺系統(tǒng)函數(shù)來實現(xiàn)的,而不同平臺的多線程的系統(tǒng)函數(shù)又都不一樣,所以給多線程編程帶來了很多麻煩。但是從C++11開始,C++終于開始在語言級別上支持多線程,我們也終于可以用一份代碼在多個平臺上跑了。
那么C++如何實現(xiàn)線程呢?以下是一個實現(xiàn)線程的簡單的例子
#include <iostream>
#include <thread>
using namespace std;
void thread_task()
{
cout << "hello thread" << endl;
}
int main()
{
thread t(thread_task);
t.join();
cout << "thread end" << endl;
return 0;
}
thread t(thread_task)這個是打開C++多線程世界的一個最簡單也是最基礎的一行代碼,從此C++開始從語言級別上支持了多線程。
以上是一個非常簡單的C++多線程的例子,main函數(shù)是主線程,thread_task是子線程,thread t(thread_task)意思是啟動這個子線程,join()會使主線程會被阻塞,直到子線程執(zhí)行完畢,然后才退程序。
所以從這個例子大家可以看出C++多線程寫法是多么的簡潔,讓人充滿的學習的欲望。