多執行緒和socket介紹

2021-09-24 11:15:40 字數 2474 閱讀 4353

程序和執行緒:

乙個程序至少有乙個執行緒,同乙個程序中的多個執行緒可以併發執行。所謂的併發只是不停的切換,只是電腦切換的太快了,人我們的大腦感覺到是在併發執行。

執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器(棧指標,程式計數器等),但**區是共享的,即不同的執行緒可以執行同樣的函式。

多執行緒是指程式中包含多個執行流,即在乙個程式中同時執行多個不同的執行緒來執行不同的任務(**),也就是說單個程式建立多個並行執行的執行緒來完成各自的任務。

執行緒肯定也要執行一段**的。所以要產生乙個執行緒,必須先為該執行緒寫乙個方法,這個方法中的**就是該執行緒執行所要執行的**。

執行緒啟動時,通過委託呼叫該方法。

為什麼要用多執行緒?

1.讓計算機「同時」做多件事情,節約時間。

2.後台執行程式,提高程式的執行效率,也不會是主介面出現無響應的情況。

3.多執行緒可以讓乙個程式「同時」處理多件事情。

4.計算機cpu大部分時間處於空閒狀態,浪費了cpu資源。

產生乙個執行緒的4步驟:

1.編寫產生執行緒所要執行的方法。

2.引用syetem.threading命名空間

3.例項化thread類,並傳入乙個指向執行緒所要執行方法的委託。如:thread thread=new thread(乙個委託:無引數無返回值的方法);

4.呼叫thread例項的start方法,標記該執行緒可以被cpu執行,但具體執行時間由cpu決定。如:thread.star();

前台執行緒:只有所有的前台執行緒都關閉才能完程式關閉時。預設為前台執行緒。

後台執行緒:只要所有的前台執行緒結束,後台執行緒自動結束。將乙個執行緒設定為後台執行緒thread.isbackground=true;

每個執行緒單獨執行方法。

執行緒執行帶引數的方法:

方法:void showtxtname(object name);

parameterizedstart pts=new parameterized(showtxtname);

thread thread new thread(pts);

thread.isbackground=true;

thread.start(txtname.text);

也可以不建立parameterized物件,直接:thread thread=new thread(showtxtname);

-多執行緒執行帶多個引數的方法時:由於執行緒接受的引數是object型別的,所以我們可以傳陣列,結構,或泛型,還有arraylist等。

socket相關概念:

(1)socket英文原意是「孔」或插座,作為程序通訊機制,去後一種意思。通常也稱作套接字,用於描述ip位址和埠,是乙個通訊鏈的控制代碼。(其實就是兩個程式通訊用的)。

(2)socket非常類似於**插座,以乙個**網為例,**的通話雙方相當於相互通訊的兩個程式,**號碼就是ip位址,任何使用者在通話之前,首先要占用一部**機,相當於申請乙個socket,同時要知道對方的號碼,相當於對方有乙個固定的socket,然後向對方撥號呼叫,相當於發出連線請求,對方假如在場並空閒,拿起**話筒,雙方就可以正式通話,相當於連線成功。雙方通話的過程,是一方向**機發出訊號和對方從**機接收訊號的過程,相當於向socket傳送資料和從socket接收資料。通話結束後,一方掛起**機相當於關閉socket,撤銷鏈結。

(3)在internet上有很多這樣的主機,這些主機一般執行了多個服務軟體,同時提供幾種服務,每個服務開啟乙個socket,並繫結到乙個埠上,不同的埠對應不同的服務(應用程式)。

(4)例如:http使用80埠,ftp使用21埠,smpt使用23埠

(5)有兩種型別:

a.流式socket(stream):是一種面向連線的socket,針對於面向連線的tcp服務應用,安全,但是效率低。

b.資料報式socket(datagram):是一種無連線的socket,對於無連線的udp服務應用,不安全(丟失,順序混亂,在接收端要分析重排及要求重發),但效率高。

socket一般應用模式:(伺服器端和客戶端)

1.伺服器端的socket(至少需要兩個)

(1)乙個負責接收客戶端連線請求,但不負責與客戶端通訊

(2)每成功接受乙個客戶端的鏈結便在服務端產生乙個對應的socket

a.在接收客戶端連線時建立

b.為每個連線成功的客戶端建立乙個對應的socket(負責和對應的客戶端通訊)

2.客戶端socket

(1)必須指定要連線的服務端位址和埠

(2)通過建立乙個socket物件來初始化乙個伺服器端的tcp鏈結

socket的通訊過程:

1.伺服器端:

(1)申請乙個socket

(2)繫結到乙個ip位址和乙個埠上

(3)開啟偵聽

2.客戶端:

(1)申請乙個socket

(2)連線伺服器(指明ip位址和埠號)

3.伺服器接到連線請求後,產生乙個新的socket(埠大於1024)與客戶端建立連線並進行通訊,原偵聽socket繼續偵聽。

**:

Socket 多執行緒

服務端 include include pragma comment lib,ws2 32 include void sendfuction socket sockconn void recvfunction socket sockclient void main if lobyte wsadata...

多執行緒開發和Socket技術

程序 每個應用程式對應乙個程序 執行緒 乙個程序至少包含乙個執行緒,執行緒要和cpu進行互動。多執行緒併發 可以理解為 同一時間 執行多件事情,如程式一邊執行,一邊計數 計時 如人一邊吃飯,一邊看電視。多執行緒併發的本質,其實並不是cpu 同時 執行多件事情,而是在不停的切換,執行一段時間事件a,切...

socket多執行緒通訊

程序與執行緒的區別 程序 在作業系統構成單獨執行流的單位。執行緒 在程序構成單獨執行流的單位 執行緒的建立和執行流程 include int pthread create pthread t restrict thread,const pthread attr t restrict attr,voi...