threadpool

进阶系列(11)—— C#多线程

旧街凉风 提交于 2020-11-13 06:24:43
一、多线程的相关概念 1.进程:是操作系统结构的基础;是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实体;由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。 2.线程:线程是程序中一个单一的顺序控制流程。是程序执行流的最小单元。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。 3.多线程:在单个程序中同时运行多个线程完成不同的工作,称为多线程。 理解: 其实更容易理解一点进程与线程的话,可以举这样一个例子:把进程理解成为一个运营着的公司,然而每一个公司员工就可以叫做一个线程。每个公司至少要有一个员工,员工越多,如果你的管理合理的话,公司的运营速度就会越好。这里官味一点话就是说。cpu大部分时间处于空闲时间,浪费了cpu资源,多线程可以让一个程序“同时”处理多个事情,提高效率。 (一)单线程问题演示 创建一个WinForm应用程序,这里出现的问题是

JAVA ThreadPool

不问归期 提交于 2020-11-03 04:33:31
概述 为了避免系统频繁的创建和销毁线程所带来的性能消耗,可以让线程得到很好的复用。当需要线程时从线程池中取,当使用完归还线程。 创建线程池方式 创建固定数量的线程池 创建一个数量的线程池 创建根据实际情况调整线程数量的线程池 创建一个执行定时任务的线程池 创建执行定时任务的线程池 任务队列 当任务被提交尚未执行的任务队列是一个BlockingQueue接口对象,只存放Runnable对象,根据队列的功能分为 SynchronousQueue ArrayBlockingQueue LinkedBlockingQueue PriorityBlockingQueue 拒绝策略 如果线程池处理速度达不到任务出现速度时,只能执行拒绝策略。 AbortPolicy CallerRunsPolicy DiscardOledestPolicy DiscardPolicy 线程数量优化规则 公式进行粗略计算:线程池个数=CPU的数量 CPU的使用率 (1+等待时间/计算时间) Fork/Join 最后看下分而治之:Fork/Join 参考资料: Fork/Join使用 分布式框架中使用CompletableFuture 来源: oschina 链接: https://my.oschina.net/u/1033181/blog/3054507

并发编程 —— 线程池

爱⌒轻易说出口 提交于 2020-10-23 05:08:59
概述 在程序中,我们会用各种池化技术来缓存创建昂贵的对象,比如线程池、连接池、内存池。一般是预先创建一些对象放入池中,使用的时候直接取出使用,用完归还以便复用,还会通过一定的策略调整池中缓存对象的数量,实现池的动态伸缩。 由于线程的创建比较昂贵,随意、没有控制地创建大量线程会造成性能问题,因此短平快的任务一般考虑使用线程池来处理,而不是直接创建线程。 那么,如何正确的创建并正确的使用线程池呢,这篇文章就来细看下。 线程池 虽然在 Java 语言中创建线程看上去就像创建一个对象一样简单,只需要 new Thread() 就可以了,但实际上创建线程远不是创建一个对象那么简单。 创建对象,仅仅是在 JVM 的堆里分配一块内存而已;而创建一个线程,却需要调用操作系统内核的 API,然后操作系统要为线程分配一系列的资源,这个成本就很高了。所以线程是一个重量级的对象,应该避免频繁创建和销毁,一般就是采用线程池来避免频繁的创建和销毁线程。 线程池原理 Java 通过用户线程与内核线程结合的 1:1 线程模型来实现,Java 将线程的调度和管理设置在了用户态。 在 HotSpot VM 的线程模型中,Java 线程被一对一映射为内核线程。Java 在使用线程执行程序时,需要创建一个内核线程;当该 Java 线程被终止时,这个内核线程也会被回收。因此 Java