• 进程。线程与线程池


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

    一个进程运行失败也不会影响到其他进程的运行。进程可以理解为一个程序的基本边界。

    process类封装了操作进程的方法

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

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

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

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


    Thread封装了操作线程的方法

    创建线程 方法无参数版:

    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

    感谢着知识大爆炸的时代,感谢这人人共享的精神
  • 相关阅读:
    开源协议
    开发新技能
    UML 思维导图 思维脑图 xmind
    小方法
    Android Service
    JS 下载图片
    quartz任务执行完之后再执行下一轮任务
    easyui 下边有滚动条问题
    微信支付证书 系统找不到指定的文件
    Swiper 动态加载数据没有变化问题
  • 原文地址:https://www.cnblogs.com/Zhang-silence/p/6403163.html
Copyright © 2020-2023  润新知