C#筆記(三):進程與線程

來源:互聯網
上載者:User

1.  引言

先來個比喻手法:

如果把上課的過程比作進程,那麼每個學生就是一個線程,他們共用教室,即線程共用進程的記憶體空間。每一個時刻,只能一個學生問老師問題,老師回答完畢,輪到下一個。即線程在一個時間片內佔有cpu。

這個例子容易理解多了吧?!下面馬上來看些基本概念。僅為個人理解,輕描淡寫。

2.  進程

進程是表示資源分派的基本單位,又是調度啟動並執行基本單位。從編程的角度,也可以將進程看成一塊包含了某些資源的記憶體地區。

例如:當使用者開啟一個txt文檔時,系統就建立一個進程,並為它分配資源。有時候開啟得很慢,這是因為此時CPU啟動並執行進程數過多,該進程需要等待調度,才能真正運行。如果再開啟另外一個txt文檔時,此時在資源管理員中會發現有兩個進程,所佔的記憶體數不一樣,是因為文檔的大小不相同。

所以我的理解是,只要是開啟應用程式,就會建立進程。

 

在.NET架構在System.Diagnostics名稱空間中,有一個類Process,可以用來建立一個新的進程。下面用代碼來建立一個Hello.txt的記事本,運行代碼後啟動工作管理員,可以發現建立了一個記事本的進程。

using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Threading;

namespace ProcessPgr
{
class Program
{
static void Main(string[] args)
{
Process process = Process.Start("notepad.exe", "Hello.txt");//建立Hello.txt的記事本
Thread.Sleep(1000);
Console.ReadLine();
process.Kill();
}
}
}

3.線程

線程是進程中執行運算的最小單位,也是執行處理機調度的基本單位。實際上線程是輕量級的進程。那麼為什麼要使用線程呢?

(1)易於調度。 (2)提高並發性。通過線程可方便有效地實現並發性。進程可建立多個線程來執行同一程式的不同部分。 (3)開銷少。建立線程比建立進程要快,所需開銷很少。。 (4)利於充分發揮多處理器的功能。通過建立多線程進程(即一個進程可具有兩個或更多個線程),每個線程在一個處理器上運行,從而實現應用程式的並發性,使每個處理器都得到充分運行。 進程和線程的關係 (1)一個線程只能屬於一個進程,而一個進程可以有多個線程,但至少有一個線程。 (2)資源分派給進程,同一進程的所有線程共用該進程的所有資源。 (3)處理機分給線程,即真正在處理機上啟動並執行是線程。 (4)線程在執行過程中,需要協作同步。不同進程的線程間要利用訊息通訊的辦法實現同步。
例如我們建立一個winform表單時,建立一個線程,將內容賦值給文字框,點擊擷取資料。此時如果直接在委託方法裡面操作會報異常,因為建立的線程不能訪問UI控制項,所以我們在擷取資料的時候,通過Invoke或者BeginInvoke去非同步呼叫。

解決方案:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

Thread thread;
public delegate void MyInvoke();

private void btnSend_Click_1(object sender, EventArgs e)
{
labMessage.Text = "正在讀取資料,請等待";
thread = new Thread(Send);
thread.IsBackground = true;
thread.Start();
}

protected void Send()
{
MyInvoke invoke = new MyInvoke(Get);
this.BeginInvoke(invoke);
}

protected void Get()
{
Thread.Sleep(3000);
txtName.Text = "TerryChan";
txtNum.Text = "07";
txtGrade.Text = "軟體工程";
}
}
}

效果:

 

最後總結:進程和線程的知識點不是簡單一兩句話就能說清楚,自己只是稍微有個大概瞭解,學習之路任重而道遠。

 

作者: ForEvErNoME
出處: http://www.cnblogs.com/ForEvErNoME/
歡迎轉載或分享,但請務必聲明文章出處。如果文章對您有協助,希望你能 推薦 或 關注

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.