走进单线程,认识单线程
写了好多年得代码
却从来没有停下来思考过
首先我认为我是个菜鸟
羽翼还未丰满
若哪里说的不对
希望看到我文章的各位同行
该说就说
该批就批
从今天开始
我会陆续写一系列个人对线程的看法
一来希望能帮助那些刚接触编程的朋友
二来也是个机会检验下自己
好了,那我就开始了....
先使用VS2010创建一个WinForm项目WinFormApp1,项目的根目录下会有个默认的窗口Form1。
走进单线程
单线程编程是最简单的一种编程方法,一般初学者才会以这种连续思维模式来编写代码。它的优点是代码编写简单,只要考虑业务流程就可以了。
比如你要实现加法运算功能,一般情况下,你会在界面(比如Form1)上放置如下控件:
textbox1、textbox2:用来输入需要相加的两个数值
button1:用来触发相加的动作
textbox3:用来展示相加的结果
功能实现流程如下:
如果不报错,程序将依次执行,程序运行时间为:输入A、B的时间+执行相加操作的时间+将结果显示到textbox3上的时间。
认识单线程
单线程编程模式简单易懂,也是最初级的编程方式,相信每个程序员都是从这个阶段一步一步走过来的。当然,每个人的情况不太一样,有的人可能很快就摆脱了这种入门级的编码形式,有的人却在不知不觉中利用单线程写了很长一段时间的代码。
从单线程的编码到多线程的转变,其实也是连续思维到并发思维模式的过渡。
在做规模很小的项目时,比如计算器,单线程或许还很好用,运行起来表面上看起来很美好。但是开发稍微复杂些的程序呢?比如大运算量、频繁IO操作的时候,单线程还能表现的很优秀吗?
我们用单线程来做一个数学计算,这个复杂的计算可能会要耗费很长的时间。比如实现
A+B=?、C+D=?
界面如下:
代码如下:
{
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的运算的,甚至点击界面都不行,输入C、D的值更是奢望,而且还会提示你“没有响应”。
此时,如果用户拿到这样的产品,你猜用户会不会扯着嗓子骂人?