实现控件的并发控制
2009-06-17 21:59
148 查看
实现控件的并发控制,首先的先说说多线程开发。
一、多线程的概念。
说线程,那就不的不提进程了。什么是进程呢?每一个应用程序,就是一个进程,它包含了运行时所需要的所有系统资源和内存。 一个进程由多个线程组成,线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,也就是说不同的线程可以执行同样的函数。
多线程是指程序中包含多个执行流,也就是说可以用多个不同线程去执行 不同的任务,程序中允许创建多个并行执行的线程来完成各自的任务。很多书上都举例浏览器这个例子来说明多线程:在浏览器中你可以再下载东西时,或图像的同时滚动页面,在访问新的页面时,播放动画和声音,打印文件等。
其实所谓的多线程,并不是cpu同时执行多个任务,cpu在同一时刻只执行一个任务,多线程的好处在与提高cpu的利用率。同时大大的提高了程序的效率。然而,我们还是需要认识到多线程的一些不利方面:
1、线程也是程序,所以线程需要占用内存,线程越多占用内存也就越多,一般小的程序感觉不到,内存缺乏的感受,个人认为,线程并不是越多越好,够用就行
2、多线程间是需要协调管理的,要控制好什么时候让其沉睡,什么时候唤醒它,让它工作,这就需要我们去很好的控制它,需要设个cpu时间跟踪线程
3、同时线程之间对共享资源的访问会相互影响,必须解决线程间竞争资源的问题,最好设个优先级
4、能少用尽量少用,因为很难控制
下面是多线程的小例子:
using System;
using System.Threading;
namespace ConsoleApplication1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
Thread thread1 = new Thread(new ThreadStart(Method1));
Thread thread2 = new Thread(new ThreadStart(Method2));
thread1.Start();
thread2.Start();
}
public static void Method1()
{
while(true)
{
Console.WriteLine("this is thread : 1");
Thread.Sleep(1000);
}
}
public static void Method2()
{
while (true)
{
Console.WriteLine("this is thread : 2");
Thread.Sleep(2000);
}
}
}
}
一、多线程的概念。
说线程,那就不的不提进程了。什么是进程呢?每一个应用程序,就是一个进程,它包含了运行时所需要的所有系统资源和内存。 一个进程由多个线程组成,线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,也就是说不同的线程可以执行同样的函数。
多线程是指程序中包含多个执行流,也就是说可以用多个不同线程去执行 不同的任务,程序中允许创建多个并行执行的线程来完成各自的任务。很多书上都举例浏览器这个例子来说明多线程:在浏览器中你可以再下载东西时,或图像的同时滚动页面,在访问新的页面时,播放动画和声音,打印文件等。
其实所谓的多线程,并不是cpu同时执行多个任务,cpu在同一时刻只执行一个任务,多线程的好处在与提高cpu的利用率。同时大大的提高了程序的效率。然而,我们还是需要认识到多线程的一些不利方面:
1、线程也是程序,所以线程需要占用内存,线程越多占用内存也就越多,一般小的程序感觉不到,内存缺乏的感受,个人认为,线程并不是越多越好,够用就行
2、多线程间是需要协调管理的,要控制好什么时候让其沉睡,什么时候唤醒它,让它工作,这就需要我们去很好的控制它,需要设个cpu时间跟踪线程
3、同时线程之间对共享资源的访问会相互影响,必须解决线程间竞争资源的问题,最好设个优先级
4、能少用尽量少用,因为很难控制
下面是多线程的小例子:
using System;
using System.Threading;
namespace ConsoleApplication1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
Thread thread1 = new Thread(new ThreadStart(Method1));
Thread thread2 = new Thread(new ThreadStart(Method2));
thread1.Start();
thread2.Start();
}
public static void Method1()
{
while(true)
{
Console.WriteLine("this is thread : 1");
Thread.Sleep(1000);
}
}
public static void Method2()
{
while (true)
{
Console.WriteLine("this is thread : 2");
Thread.Sleep(2000);
}
}
}
}
相关文章推荐
- 实现控件的并发控制(一)
- 实现 Java 多线程并发控制框架
- 设置隔离级别实现并发控制
- C#通用类实现 读取xml控制Asp.net控件输入信息长度(TextBox,FileUpload)
- UltraNumTextBox【实现所有数字输入的同时,可以控制当控件禁用时ForeColor】
- 实现 Java 多线程并发控制框架
- MVCC PostgreSQL实现事务和多版本并发控制的精华
- MFC edit控件实现控制台式滚动输出
- VS C# .NET WebBrowser控件 利用插入JS代码,实现控制弹出IE窗口
- SQL Server 2000+ADO.NET实现并发控制
- SQL Server 2000+ADO.NET实现并发控制...(二)
- 实现 Java 多线程并发控制框架
- 如何实现由列表控件控制的属性表
- 实现 Java 多线程并发控制框架
- Java高并发程序-Chapter3 JDK并发包(第十七讲)同步控制之ReentrantLock 的实现
- 用锁实现SQLSERVER中并发控制--实现Oracle中select .... for update功能
- shell队列实现线程并发控制
- RadioButtton java代码实现左右带自定义的图片,并且控制字体与图片间距,同时控件长度对其功能。
- 在CGD中快速实现多线程的并发控制
- delphi下实现控制其它窗体中的控件