zoukankan      html  css  js  c++  java
  • 线程(Thread、ThreadPool)

    多线程的操作,推荐使用线程池线程而非新建线程。因为就算只是单纯的新建一个线程,这个线程什么事情也不做,都大约需要1M的内存空间来存储执行上下文数据结构,并且线程的创建与回收也需要消耗资源,耗费时间。而线程池的优势在于线程池中的线程是根据需要创建与销毁,是最优的存在。但是这也有个问题,那就是线程池线程都是后台线程,主线程执行完毕后,不会等待后台线程而直接结束程序。所以下面就要引出.NET Framework4.0提供的Task,来解决此类问题。

    Task是.NET Framework4.0提供的新的操作线程池线程的封装类。它提供:等待、终止、返回值...优化线程操作的功能。

    1)ThreadPool的代码将以先进先出的算法存储在全局队列中,并且多个工作者线程之间竞争同一个同步锁。(这就Task性能优于ThreadPool的第一个原因)

    2)Task的代码将以先进后出的算法存储在本地队列中,工作者线程执行本地队列中的代码没有同步锁的限制(这是Task性能优于ThreadPool的第二个原因),并且当工作者线程2空闲并且工作者线程1忙碌时,工作者线程2会尝试从工作者线程1(或者别的忙碌的工作者线程)的本地队列尾部“偷”任务,并会获取一个同步锁,不过这种行为很少发生。

  • 相关阅读:
    expd,impd常用命令
    linux oracle 服务重启过程
    oracle 锁表查询及kill
    oracle 存储过程卡无法编辑
    oracle 各版本之间的导入导出
    与linux 病毒的一次接触
    一分钟读懂PDCA 循环
    5W2H分析法——你肯定听过的一种思维工具
    你真的懂如何进行用户调查么?
    精选互联网运营必读的 8 本书籍
  • 原文地址:https://www.cnblogs.com/qaidouding/p/8658738.html
Copyright © 2011-2022 走看看