COMPUTER_LZY

要输就输给追求,要嫁就嫁给幸福

导航

走进单线程,认识单线程

写了好多年得代码

却从来没有停下来思考过

首先我认为我是个菜鸟

羽翼还未丰满

若哪里说的不对

希望看到我文章的各位同行

该说就说

该批就批

 

从今天开始

我会陆续写一系列个人对线程的看法

一来希望能帮助那些刚接触编程的朋友

二来也是个机会检验下自己

好了,那我就开始了....

 

 

先使用VS2010创建一个WinForm项目WinFormApp1,项目的根目录下会有个默认的窗口Form1

 

 

       走进单线程

 

单线程编程是最简单的一种编程方法,一般初学者才会以这种连续思维模式来编写代码。它的优点是代码编写简单,只要考虑业务流程就可以了。

比如你要实现加法运算功能,一般情况下,你会在界面(比如Form1)上放置如下控件:

    textbox1textbox2:用来输入需要相加的两个数值

    button1:用来触发相加的动作

    textbox3:用来展示相加的结果

 

功能实现流程如下:

 

如果不报错,程序将依次执行,程序运行时间为:输入AB的时间+执行相加操作的时间+将结果显示到textbox3上的时间。

 

 认识单线程

 

 

单线程编程模式简单易懂,也是最初级的编程方式,相信每个程序员都是从这个阶段一步一步走过来的。当然,每个人的情况不太一样,有的人可能很快就摆脱了这种入门级的编码形式,有的人却在不知不觉中利用单线程写了很长一段时间的代码。

从单线程的编码到多线程的转变,其实也是连续思维到并发思维模式的过渡。

在做规模很小的项目时,比如计算器,单线程或许还很好用,运行起来表面上看起来很美好。但是开发稍微复杂些的程序呢?比如大运算量、频繁IO操作的时候,单线程还能表现的很优秀吗?

 

 

我们用单线程来做一个数学计算,这个复杂的计算可能会要耗费很长的时间。比如实现

A+B=?、C+D=

界面如下:

 

 

代码如下:

 

 public partial class SingleThread : Form
    {
        
public SingleThread()
        {
            InitializeComponent();
        }
        
private int ab = 0;
        
private void button1_Click(object sender, EventArgs e)
        {
            add_AB();
            tb_AB.Text 
= ab.ToString();
        }
        
private int cd = 0;
        
private void button2_Click(object sender, EventArgs e)
        {
            add_CD();
            tb_CD.Text 
= cd.ToString();
        }
        
/// <summary>
        
/// 运算A+B
        
/// </summary>
        private void add_AB()
        {
            Thread.Sleep(
10000);//运算时间:10秒
            ab= int.Parse(tb_A.Text) + int.Parse(tb_B.Text);
        }
        
/// <summary>
        
/// 运算C+D
        
/// </summary>
        private void add_CD()
        {
           cd 
= int.Parse(tb_C.Text) + int.Parse(tb_D.Text);
        }
    }

在程序中,我们假设了add_AB()方法运算量“很大,运算过程”非常耗时“(其实就是让线程睡眠了10秒,目的是用简单的运算模拟出复杂计算的效果来)。在A+B的运算过程中,你是无法进行C+D的运算的,甚至点击界面都不行,输入CD的值更是奢望,而且还会提示你“没有响应”。

此时,如果用户拿到这样的产品,你猜用户会不会扯着嗓子骂人?

 

 

 

 

 

 

posted on 2011-07-21 18:42  CANYOUNG  阅读(8347)  评论(4编辑  收藏  举报