程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 簡單對比C#程序中的單線程與多線程設計

簡單對比C#程序中的單線程與多線程設計

編輯:關於C語言

多線程概念

1.一個正在運行的應用程序在操作系統中被視為一個進程,進程可以包括多個線程。線程是操作系統分配處理器時間的基本單位
2.應用程序域是指進行錯誤隔離和安全隔離,在CLR中運行,每個程序域都是單個線程啟動,但該程序域中的代碼可以創建附加應用程序域和附加線程
3.多線程的優點在於一個線程阻塞的時候,CUP可以運行其他的線程而不需要等待,這樣大大的提高了程序的執行效率。而缺點在於線程需要占用內存,線程越多占用的內存就多,多線程需要協調和管理,所以需要占用CPU時間以便跟蹤線程,線程之間對共享資源訪問會互相影響,所以得解決爭用共享資源的問題,線程太多,也會導致控制起來更復雜,最終導致很多程序的缺陷。
4.一個進程可以創建多個線程以執行與該進程關聯的部分程序代碼,線程使用Tread處理

C#單線程與多線程對比:

單線程:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 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 Stockes { public partial class DeletgateThread : Form { public DeletgateThread() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false;//允許跨線程調用 } public delegate void writeTxt(char chr);//定義委托 public writeTxt writetxt;//聲明委托 public void write(string str, writeTxt writes)//使用委托 { for (int i = 0; i < str.Length; i++) { writes(str[i]); DateTime now = DateTime.Now; while (now.AddSeconds(1) > DateTime.Now) { } } } private void text1(char chr) { textBox1.AppendText(chr.ToString()); } public void text2(char chr) { textBox2.AppendText(chr.ToString()); } private void stratWrite() { if (checkBox1.Checked) { textBox1.Clear(); groupBox4.Text = "正在運行。。"; groupBox2.Refresh(); writetxt = new writeTxt(text1); write(textBox3.Text.Trim(),writetxt); } if(checkBox2.Checked) { textBox2.Clear(); groupBox5.Text = "正在運行。。"; groupBox3.Refresh(); writetxt = new writeTxt(text2); write(textBox3.Text.Trim(),writetxt); } } private void button1_Click(object sender, EventArgs e) { Thread tr = new Thread(new ThreadStart(stratWrite));//創建線程 tr.Start();//啟動線程 } } }


多線程、並發任務:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 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 Stockes { public partial class DeletgateThread : Form { public DeletgateThread() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false;//允許跨線程調用 } public delegate void writeTxt(char chr);//定義委托 public writeTxt writetxt;//聲明委托 public void write(string str, writeTxt writes)//使用委托 { for (int i = 0; i < str.Length; i++) { writes(str[i]); DateTime now = DateTime.Now; while (now.AddSeconds(1) > DateTime.Now) { } } } private void text1(char chr) { textBox1.AppendText(chr.ToString()); } public void text2(char chr) { textBox2.AppendText(chr.ToString()); } private void stratWrite() { if (checkBox1.Checked) { textBox1.Clear(); textBox1.Refresh(); groupBox4.Text = "正在運行。。"; groupBox2.Refresh(); writetxt = new writeTxt(text1); write(textBox3.Text.Trim(),writetxt); } } private void stratwrite1() { if (checkBox2.Checked) { textBox2.Clear(); textBox2.Refresh(); groupBox5.Text = "正在運行。。"; groupBox3.Refresh(); writetxt = new writeTxt(text2); write(textBox3.Text.Trim(), writetxt); } } private void button1_Click(object sender, EventArgs e) { Thread tr = new Thread(new ThreadStart(stratWrite));//創建線程 tr.Start();//啟動線程 Thread tr1 = new Thread(new ThreadStart(stratwrite1));//創建第二個線程 tr1.Start();//啟動線程 } } }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved