c#多線程和Socket筆記

來源:互聯網
上載者:User

標籤:

進程和線程:
        一個進程至少有一個線程,同一個進程中的多個線程可以並發執行。所謂的並發只是不停的切換,只是電腦切換的太快了,人我們的大腦感覺到是在並發執行。
        線程是程式中的一個執行流,每個線程都有自己的專有寄存器(棧指標,程式計數器等),但代碼區是共用的,即不同的線程可以執行同樣的函數。
        多線程是指程式中包含多個執行流,即在一個程式中同時運行多個不同的線程來執行不同的任務(代碼),也就是說單個程式建立多個並存執行的線程來完成各自的任務。
        線程肯定也要執行一段代碼的。所以要產生一個線程,必須先為該線程寫一個方法,這個方法中的代碼就是該線程運行所要執行的代碼。
        線程啟動時,通過委託調用該方法。 
        為什麼要用多線程?
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繼續偵聽。

c#多線程和Socket筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.