进程。线程与线程池

进程和线程
进程:一个程序就是一个进程,它包含着运行程序所须要的全部的资源。进程之间是独立的,一个进程没法直接访问另外一个进程的数据。(除非使用分布式计算方式)html

一个进程运行失败也不会影响到其余进程的运行。进程能够理解为一个程序的基本边界。windows

process类封装了操做进程的方法多线程

线程:windows任务调度的最小单位。线程是程序中的一个代码流,代码必须执行在线程中,有线程才有代码执行并发

进程是一个资源的拥有着,进程的建立,撤销和切换的过程当中,系统都必须为之付出巨大的时空资源。分布式

 

前台线程与后台线程的区别:函数

后台线程在程序退出时退出,前台线程会在执行完代码以后退出。ui

 


Thread封装了操做线程的方法
this

建立线程 方法无参数版:spa

ThreadStart threadStart = new ThreadStart();//括号中写调用进程启动的方法
Threard myThread = new Thread(threadStart); //建立一个thread的实例
[myThread.Name="";] //线程名
[myThread.Prioryity=ThreadPriorytyNormal;]建议系统将建立的线程优先级设为最 
高
[myThread.IsBackground=true;] //是否为后台线程,

myThread.Start //告诉CPU线程能够启动了

myThread.Join(int) //阻塞主线程,等待子线程执行完毕。括号内等待毫秒。
[myThread.Abort();] // 强行终止线程,此方法会引起异常,暴力手段。

  


当不容许阻塞ui线程时,建立多线程。线程

方法有参数时

ParameterizedThreadStart parThreadStart = new ParameterizedThreadStart(方法名);
Thread myThread = new Thread(parThreadStart);
myThread.Start(方法参数);

  


既然没法跨线程访问数据,那么如何在程序猿手动建立的线程中访问form控件的值呢?
1.在页面的构造函数中写这么一串代码
控件.CheckForillegalCrossThreadCalls=false; //取消对某控件的跨线程访问监视

上面这种方法很low,微软会平白无故的封装一个监视控件跨线程吗?

2.使用Invork方法


invoke会沿着标签去找寻找建立控件的线程执行下面的方法,谁建立了textBox的线程,就用该线程调用该委托

 

this.textBox1.Invoke(委托[,参数]);


文件并发:


当多个资源访问同一个线程,须要加锁。lock(object a) {code b}

线程切换很是消耗资源,Cpu在切换线程时,须要把当前线程执行的状态保持到寄存器里去。


建立也很是消耗资源,线程建立很是慢,占用大量的内存空间,每一个线程里面最少1M内存开销。

线程池:提升了线程的利用率,很是适合工做任务很是小,并且又须要使用单独的线程来解决的问题。

 

  • 线程池中取出的线程都是后台线程。
  • 咱们想手动关闭线程的话,就要手动建立线程。
  • 当要对线程池的线程优先级作设置的情景下,手动建立线程。
  • 若是执行的线程执行时间特别长,建议手动建立线程。

 

关于线程池的更多信息。

http://www.cnblogs.com/heyuquan/archive/2012/12/23/threadPool-manager.html

相关文章
相关标签/搜索