簡單對(duì)比C#程序中的單線程與多線程設(shè)計(jì)
多線程概念
1.一個(gè)正在運(yùn)行的應(yīng)用程序在操作系統(tǒng)中被視為一個(gè)進(jìn)程,進(jìn)程可以包括多個(gè)線程。線程是操作系統(tǒng)分配處理器時(shí)間的基本單位
2.應(yīng)用程序域是指進(jìn)行錯(cuò)誤隔離和安全隔離,在CLR中運(yùn)行,每個(gè)程序域都是單個(gè)線程啟動(dòng),但該程序域中的代碼可以創(chuàng)建附加應(yīng)用程序域和附加線程
3.多線程的優(yōu)點(diǎn)在于一個(gè)線程阻塞的時(shí)候,CUP可以運(yùn)行其他的線程而不需要等待,這樣大大的提高了程序的執(zhí)行效率。而缺點(diǎn)在于線程需要占用內(nèi)存,線程越多占用的內(nèi)存就多,多線程需要協(xié)調(diào)和管理,所以需要占用CPU時(shí)間以便跟蹤線程,線程之間對(duì)共享資源訪問會(huì)互相影響,所以得解決爭用共享資源的問題,線程太多,也會(huì)導(dǎo)致控制起來更復(fù)雜,最終導(dǎo)致很多程序的缺陷。
4.一個(gè)進(jìn)程可以創(chuàng)建多個(gè)線程以執(zhí)行與該進(jìn)程關(guān)聯(lián)的部分程序代碼,線程使用Tread處理
C#單線程與多線程對(duì)比:
單線程:
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;//允許跨線程調(diào)用
}
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 = "正在運(yùn)行。。";
groupBox2.Refresh();
writetxt = new writeTxt(text1);
write(textBox3.Text.Trim(),writetxt);
}
if(checkBox2.Checked)
{
textBox2.Clear();
groupBox5.Text = "正在運(yùn)行。。";
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));//創(chuàng)建線程
tr.Start();//啟動(dòng)線程
}
}
}
多線程、并發(fā)任務(wù):
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;//允許跨線程調(diào)用
}
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 = "正在運(yùn)行。。";
groupBox2.Refresh();
writetxt = new writeTxt(text1);
write(textBox3.Text.Trim(),writetxt);
}
}
private void stratwrite1()
{
if (checkBox2.Checked)
{
textBox2.Clear();
textBox2.Refresh();
groupBox5.Text = "正在運(yùn)行。。";
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));//創(chuàng)建線程
tr.Start();//啟動(dòng)線程
Thread tr1 = new Thread(new ThreadStart(stratwrite1));//創(chuàng)建第二個(gè)線程
tr1.Start();//啟動(dòng)線程
}
}
}
相關(guān)文章
淺拷貝和深拷貝深入理解(shallow copy VS deep copy)
淺拷貝和深拷貝深入理解(shallow copy VS deep copy) 本文重點(diǎn)討論引用類型變量的拷貝機(jī)制和實(shí)現(xiàn)2014-01-01
C#實(shí)現(xiàn)把指定數(shù)據(jù)寫入串口
這篇文章主要介紹了C#實(shí)現(xiàn)把指定數(shù)據(jù)寫入串口,直接給出示例代碼,需要的朋友可以參考下2015-06-06
C#讀取多條數(shù)據(jù)記錄導(dǎo)出到Word之圖片輸出改造
這篇文章主要為大家詳細(xì)介紹了C#讀取多條數(shù)據(jù)記錄并導(dǎo)出到Word標(biāo)簽?zāi)0逯械膱D片輸出問題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2024-11-11
C#中GraphicsPath的Flatten方法用法實(shí)例
這篇文章主要介紹了C#中GraphicsPath的Flatten方法,實(shí)例分析了Flatten方法的相關(guān)使用技巧,需要的朋友可以參考下2015-06-06
C#探秘系列(一)——ToDictionary,ToLookup
這個(gè)系列我們看看C#中有哪些我們知道,但是又不知道怎么用,又或者懶得去了解的東西,比如這篇我們要介紹的toDictionary和ToLookup。2014-05-05

