简单对比C#程序中的单线程与多线程设计_C#教程

多线程概念

1.一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括多个线程。线程是操作系统分配处理器时间的基本单位
2.应用程序域是指进行错误隔离和安全隔离,在CLR中运行,每个程序域都是单个线程启动,但该程序域中的代码可以创建附加应用程序域和附加线程
3.多线程的优点在于一个线程阻塞的时候,CUP可以运行其他的线程而不需要等待,这样大大的提高了程序的执行效率。而缺点在于线程需要占用内存,线程越多占用的内存就多,多线程需要协调和管理,所以需要占用CPU时间以便跟踪线程,线程之间对共享资源访问会互相影响,所以得解决争用共享资源的问题,线程太多,也会导致控制起来更复杂,最终导致很多程序的缺陷。
4.一个进程可以创建多个线程以执行与该进程关联的部分程序代码,线程使用Tread处理

C#单线程与多线程对比:

单线程:

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();//启动线程
    } 

  }
} 

 
多线程、并发任务: 

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();//启动线程
    } 

  }
} 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#
, 多线程
单线程
冷暖对比简单的色彩画、改革开放前后简单对比、c 简单程序、简单的c语言程序、简单c语言代码,以便于您获取更多的相关知识。

时间: 2025-01-01 21:15:13

简单对比C#程序中的单线程与多线程设计_C#教程的相关文章

Asp.Net在Web应用程序中执行计划任务(多线程)

asp.net|web|程序|多线程|执行 在业务复杂的应用程序中,有时候会要求一个或者多个任务在一定的时间或者一定的时间间隔内计划进行,比如定时备份或同步数据库,定时发送电子邮件等,我们称之为计划任务.实现计划任务的方法也有很多,可以采用SQLAgent执行存储过程来实现,也可以采用Windows任务调度程序来实现,也可以使用Windows服务来完成我们的计划任务,这些方法都是很好的解决方案.但是,对于Web应用程序来说,这些方法实现起来并不是很简单的,主机服务提供商或者不能直接提供这样的服务

COBOL和Java在SaaS应用程序中交互时遭遇多线程挑战

回到云岛:所有 SaaS 用户都很高兴.因为他们能获得快速响应.因为这些用户惟一拥有的控制权就是对访问应用程序的控制,他们不担心应用程序是否有多线程例程:也不担心在云中有多少核心用于并行加速多线程的处理.问题应用程序被成功地从内部多线程 COBOL 遗留系统中迁移出来. 当然,有一天,SaaS 应用程序的速度会慢下来,而且越来越慢:直到用户无法忍受.他们这时才发现: 只有一个核心在正常运行,其余核心都发生了故障. SaaS 订阅仅限于两个核心,而不是所有四个核心. SaaS 应用程序近来升级出现

Qt之ui在程序中的使用-多继承法介绍_C 语言

thirdDialog.h 复制代码 代码如下: #ifndef THIRDDIALOG_H #define THIRDDIALOG_H #include <QtGui> #include "ui_third.h" class thirdDialog:public QDialog,private Ui::Third { Q_OBJECT public: thirdDialog(QWidget *parent=0); ~thirdDialog(); }; #endif thi

C#中事件的定义和使用_C#教程

事件的声明和使用与代理有很密切的关系,事件其实是一个或多个方法的代理,当对象的某个状态发生了变化,代理会被自动调用,从而代理的方法就被自动执行. 声明和使用一个事件需要如下步骤: 1.创建一个代理. 2.在类的内部利用event关键字声明事件,并且在类中定义调用事件的方法,也可以定义一个处理事件消息的方法. 声明一个事件的基本形式有两种: 修饰符  event   类型   标识符 修饰符  event   类型   标识符{get{};set{};} 其中: 修饰符是指C#语言的访问修饰符:类

简单讲解Go程序中使用MySQL的方法_Golang

go官方仅提供了database package,database package下有两个包sql,sql/driver.这两个包用来定义操作数据库的接口,这就保证了无论使用哪种数据库,他们的操作方式都是相同的. 但go官方并没有提供连接数据库的driver,如果要操作数据库,还需要第三方的driver 包,幸好,主流的数据库的driver都已经有了:https://code.google.com/p/go-wiki/wiki/SQLDrivers 其中,mysql有两个包,一个是mymysql

简单对比分析JavaScript中的apply,call与this的使用_javascript技巧

1.apply定义 apply:调用函数,并用指定对象替换函数的 this 值,同时用指定数组替换函数的参数. 语法:apply([thisObj[,argArray]]) thisObj 可选.要用作 this 对象的对象. argArray 可选.要传递到函数的一组参数. 2.call定义 call:调用一个对象的方法,用另一个对象替换当前对象. 语法:call([thisObj[, arg1[, arg2[, [, argN]]]]]) thisObj 可选.将作为当前对象使用的对象. a

简单讲解C语言中宏的定义与使用_C 语言

宏定义是预编译功能的一种, 预编译又称为预处理, 是为编译做的预备工作的阶段.处理#开头的指令, 比如拷贝 #include 包含的文件代码,#define宏定义的替换,条件编译等. 使用宏定义的好处:使用宏定义的好处:可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改.例如 π 这个常量,我们有时候会在程序的多个地方使用,如果每次使用都重新定义,一来比较麻烦,二来容易出错,所以我们可以把 π 做成宏定义来使用.   语法说明: (1)宏名一般用大写 (2)使用宏可提高程序的通用性

网页中的丝带和标牌设计英文教程

潮流会静静地诞生于我们未留意之时.当你浏览众多网站时,通常会看见自己在别处错过的花纹.图案.其中就包括丝带和标牌. 这两种图案越来越流行,文中将它们放在一起讨论,因为它们大都同时使用,丝带不言而喻,大家都清楚这个元素.但标牌--我的意思是它是放在屏幕上方 的人造标记,看起来就像t恤衫上的商标.使用这两种元素的网站确实质量上乘.这次展示的案例都非常华美.极少有潮流像这样:筛掉许许多多无趣的例子才找到 一个有吸引力的个案. 为什么使用丝带和标牌 标牌非常有用,因为它能有效吸引用户注意力.标牌将内容摆

C#中实现网段扫描的代码_C#教程

摘要  想必大家对小榕时光等扫描器都非常熟悉了,有没有自己写一个的冲动.最近微软推实施了.NET战略方案,C#是主推语言,你们是否有兴趣用C#来实现对局域网IP地址的扫描,尝试一下自己写的快乐,那么请跟我来.  正文  1.先介绍一下使用的类:  DNS类:在.net中的System.net命名空间下,主要的功能是从 Internet 域名系统 (DNS) 检索关于特定主机的信息.  IPHostEntry类:将一个域名系统 (DNS) 主机与一组别名和一组匹配的 IP 地址关联,和DNS类一起