线程 基础

  • CPU: 时间轮询机制(纳秒级),执行线程调度(注意CPU寄存器一出一进的时间开销不可大于CPU阻塞时间)
  • GUI:消息轮询机制,UI线程不支持跨线程访问,可以通过 Invoke/BackgroundWorker/SynchronizationContext
  • 进程 = 主线程 + 0 或 多个子线程
  • 线程状态: 就绪/阻塞/运行
  • 线程池:以减少创建和销毁线程为目的,系统自动维护和调度线程,用户是不可控制的。如果需要等待线程池完成所有任务,可以通过 ManualResetEvent 设置信号状态控制。
  • UI线程: CheckForIllegalCrossThreadCalls 默认为true. 如果试图访问控件的方法或属性之一的线程不是创建该控件的线程,则通常会导致不可预知的结果.
  • 多线程方法重入: 注意共享资源问题, 通常以加锁 lock/Monitor 来解决.
  • 前台后台线程区别: 设置为前台的所有子线程不会随着主线程的结束而结束, 而设置为后台的所有子线程则会随着主线程的结束而结束.

  1. 默认创建的线程都是为前台线程: IsBackground=false

  • System.Threading.AutoResetEvent wait = new System.Threading.AutoResetEvent(false);
    wait.WaitOne();//等待,当收到Set信号则继续执行并自动设置Reset信号,而ManualResetEvent的wait则不会自动设置
    wait.Set();//让等待的地方继续执行
    当然这两个方法要写在不同的线程里面,如果写在一个线程里面 wait.Set(); 是没机会执行的

  • 异步线程:IAsyncResult
posted @ 2012-03-09 16:59  Yu  阅读(180)  评论(0编辑  收藏  举报