[TOC] 概述 多线程能大幅度的提升CPU的使用率, 使得任务处理更加快速, 但是也并不是多线程一定高效, 线程的切换会涉及到CPU上下文切换, 上下文的切换会大幅度的拉低CPU的性能. 线程的五种状态 新建状态(New) 当线程对象被创建后, 即进入了新建状态. 如: 就绪状态(Runnable ...
分类:
编程语言 时间:
2018-10-10 12:00:06
阅读次数:
275
完成端口(队列,出口) 不是很多线程,线程数为cpu线程数,减少cpu线程上下文切换,不会全部等待,线程会挂起,能用于其它工作,没有64个事件限制,,并非发起io请求的才能处理数据 完成端口,数据是从内核对象接受好后,通知完成,交给我们处理,而不是通知数据来了,再去取 异步用到重叠io数据结构(执行 ...
分类:
其他好文 时间:
2018-09-28 19:02:49
阅读次数:
137
挑战一:上下文切换 多线程一定比单线程快么? 输出 答案是并不一定,当测试量达到一百万的时候,并发才能比串行优势点(本代码环境结果); 线程创建和上下文切换都是需要开销的。 如何减少上下文的切换? 无锁并发编程:可以使用一些方法避免使用锁,如将数据的ID按照Hash算法取模分段,不同的线程处理不同段 ...
分类:
其他好文 时间:
2018-09-19 23:35:47
阅读次数:
233
任务一般可分为:CPU密集型、IO密集型、混合型,对于不同类型的任务需要分配不同大小的线程池。 CPU密集型任务(计算密集型的程序)尽量使用较小的线程池,一般为CPU核心数+1。 因为CPU密集型任务使得CPU使用率很高,若开过多的线程数,只能增加上下文切换的次数,因此会带来额外的开销。(即使当计算 ...
分类:
编程语言 时间:
2018-09-19 14:46:16
阅读次数:
175
上下文切换 即使是单核处理器也支持多线程执行代码,cpu通过给每个线程分配cpu时间片来实现这个机制。时间片是cpu分配给各个线程的时间,因为时间片非常短,所以cpu通过不听地切换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几十毫秒。 cpu通过时间片分配算法来循环执行任务,当前任务执行一 ...
分类:
编程语言 时间:
2018-09-18 11:07:19
阅读次数:
146
进程是资源分配和任务调度的基本单位, 进程就是包含上下文切换的程序执行时间总和=CPU加载上下文环境+CPU执行+CPU保存上下文环境,可以理解为时间片段; 进程的颗粒度太大了,将进程分块,按照a,c,b,d的顺序执行,实质上是将进程分配为更小的单位,也就是线程。一个进程至少含有一个线程,同一个进程 ...
分类:
编程语言 时间:
2018-09-15 22:01:59
阅读次数:
187
线程池的作用 在上一篇中我们了解了创建和销毁线程是一个昂贵的操作,要耗费大量的时间,太多的线程会浪费内存资源,当线程数量操作计算机CPU的数量后操作系统必须调度可运行的线程并执行上下文切换,所有太多的线程还会影响性能,那么有没有办法让线程可以重复使用了,让线程干完活之后不用销毁,把它放在一个容器中,... ...
分类:
编程语言 时间:
2018-09-13 20:50:01
阅读次数:
275
并发编程的目的是为了让程序运行得更快,但是,并不是启动更多的线程就能让程序最大限度地并发执行。在进行并发编程时,如果希望通过多线程执行任务让程序运行得更快,会面临非常多的挑战,比如上下文切换的问题、死锁的问题,以及受限于硬件和软件的资源限制问题,本章会介绍几种并发编程的挑战以及解决方案。 一、上下文 ...
分类:
编程语言 时间:
2018-09-12 01:14:45
阅读次数:
248
这里是在学习Intel x86_64体系架构时学习到的一些概念,记录下来以供日后参考。如果有错的地方,欢迎指正! CPU上下文切换(context switch): 这个概念第一次听到对我来说是完全陌生的,但了解之后发现和老师讲的东西有很多联系。现在linux是大多基于抢占式,CPU给每个任务一定的 ...
分类:
其他好文 时间:
2018-09-11 21:18:38
阅读次数:
116
并发:是指两个或更多独立的活动同时发生,在单个系统里同时执行多个独立任务,而非顺序地进行一些活动 老:单个处理器,某一时刻执行一个任务,可以每秒进行多次任务切换 新:多核处理器,真正的并行多核任务,同时也可以进行任务切换 系统从一个任务到另一个任务(即进行切换),要进行一次上下文切换,切换时,操作系 ...
分类:
编程语言 时间:
2018-08-25 14:14:43
阅读次数:
126