多線程和Socket——在線聊天室


多線程開發和Socket技術 

一、進程和線程

進程:每個應用程序對應一個進程;

線程:一個進程至少包含一個線程,線程要和CPU進行交互。

 

多線程並發(可以理解為):"同一時間"執行多件事情,如程序一邊執行,一邊計數(計時);如人一邊吃飯,一邊看電視。

 

多線程並發的本質,其實並不是CPU"同時"執行多件事情,而是在不停的切換,執行一段時間事件A,切換,執行一段時間事件B;再切換,再執行一段時間事件A,如此往復,因為CPU處理速度非常快,電腦的使用者感覺不到,所以看起來就像是在同時執行多件事情。

 

線程是程序中的一個執行流,每個線程都有自己的專有寄存器(棧指針、程序計數器等),但代碼區是共享的,即不同的線程可以執行同樣的函數。

多線程是指程序中包含多個程序執行流,即在一個程序中可以同時運行多個不同的線程來執行不同的任務(代碼),也就是說允許單個程序創建多個並行執行的線程來完成各自的任務。

 

一個進程會創建一個默認線程,即主線程,也就是UI線程。 

 

多線程的優點

1.讓計算機"同時"做多件事情,節約時間;

2.后台運行程序,提高程序的執行效率,也不會使主界面(UI線程)出現無響應的情況;

3.多線程可以讓一個程序"同時"執行多件事情;

4.計算機CPU大部分時間處於空閑狀態,避免浪費了CPU資源。

二、.Net中如何實現多線程

1.為線程執行一個方法(線程肯定要執行一段代碼),這個方法中的代碼就是該線程運行時要執行的代碼(找一個人來做一件事)

 

產生一個線程的4個步驟:

1.編寫該線程所要執行方法的代碼

2.引用System.Threading命名空間

3.實例化Thread類,並傳入一個指向線程所要運行方法的委托。(這時候線程已經產生,但還沒有運行)

4.調用Thread實例的start()方法,標記該線程可以被CPU執行了,但具體執行時間由CPU決定。 

三、前台線程和后台線程

前台線程:只有所有的前台線程都關閉才能完成程序關閉的線程;

后台線程:只要所有的前台線程結束,后台線程自動結束。

 

將一個線程設置為后台線程的方法:

Thread.IsBackground = true;

線程可以執行

1.不帶參數的委托(無傳入參數)

ThreadStart();

2.傳入帶參數的委托

ParameterizedThreadStart(object);

傳入參數類型為object,理論上可以傳任意的集合、列表和數組等。

 

例子:

定義一個執行循環任務的方法:

void CountNum()
{
    DateTime beginTime = DateTime.Now;

    for (int i = 0; i < 999999999; i++)
    {
        //故意留空
    }

    TimeSpan ts = DateTime.Now.Subtract(beginTime);
    MessageBox.Show("循環執行完畢,用時:" + ts.TotalMilliseconds);
}

//在多線程button的click事件中
Thread thread = new Thread(CountNum);
thread.IsBackground = true; //標記該線程為后台線程(前台線程結束后停止運行)
thread.Start();

四、套接字Socket

1.socket的英文原意是"孔"或"插座"。作為進程通信機制,取后一種意思。通常也成為"套接字",用於描述IP地址和端口,是一種通信鏈的句柄。(其實就是2個程序通信用的)

2.socket非常類似於電話插座。以電話網為例,電話的通話雙方都相當於相互通信的2個程序,電話號碼就是IP地址。任何用戶在通話之前,首先要占有一部電話機,相當於申請一個socket;同時要知道對方的電話號碼,相當於對方有一個固定的socket;然后雙方撥號呼叫,相當於發出連接請求。加入對方在場並空閑,拿起電話聽筒,雙方就可以正式通話了,相當於連接成功。雙方通話的過程中,是一方向電話機發出信號和對方從電話機接收信號的過程,相當於向socket發送數據和從socket接收數據。通話結束后,一方掛斷電話相當於關閉socket,撤銷連接。

3.在Internet上有許多主機,運行多個服務軟件,同時提供幾種服務,每種服務都打開一個socket,並綁定到一個端口上,不同的端口對應不同的服務(應用程序)。

例如:http使用80端口,ftp使用21端口,smtp使用23端口。

4.socket傳遞數據主要有2中類型:

  • 流式socket(STREAM)

是一種面向連接的socket,針對於面向連接的TCP服務應用,安全,但是效率低。

  • 數據報式socket報文(DATAGRAM)

是一種無連接的socket,對應於無連接的UDP服務應用,不安全(丟失、順序混亂,在接收端要分析重排及要求重發),但效率高。

 

5.Socket一般應用模式(服務端和客戶端交互)

 

 

三次握手的過程。

 

6.socket的通訊過程

 

Socket操作相關類和方法

 

--EOF--


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM