cpu接口

java设计模式

匿名 (未验证) 提交于 2019-12-02 21:53:52
转载原地址: https://blog.csdn.net/a394268045/article/details/51801258 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下: 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化

【python】-- GIL锁、线程锁(互斥锁)、递归锁(RLock)

二次信任 提交于 2019-12-01 08:31:37
GIL锁 计算机有4核,代表着同一时间,可以干4个任务。如果单核cpu的话,我启动10个线程,我看上去也是并发的,因为是执行了上下文的切换,让看上去是并发的。但是单核永远肯定时串行的,它肯定是串行的,cpu真正执行的时候,因为一会执行1,一会执行2.。。。。正常的线程就是这个样子的。但是,在python中,无论有多少核,永远都是假象。无论是4核,8核,还是16核.......不好意思,同一时间执行的线程只有一个(线程),它就是这个样子的。这个是python的一个开发时候,设计的一个缺陷,所以说python中的线程是假线程。 1、 全局解释器锁(GIL)  无论你启多少个线程,你有多少个cpu, Python在执行的时候会淡定的在同一时刻只允许一个线程运行 2、GIL存在的意义?  因为python的线程是调用操作系统的原生线程,这个原生线程就是C语言写的原生线程。因为python是用C写的,启动的时候就是调用的C语言的接口。因为启动的C语言的远程线程,那它要调这个线程去执行任务就必须知道上下文,所以python要去调C语言的接口的线程,必须要把这个上限问关系传给python,那就变成了一个我在加减的时候要让程序串行才能一次计算。就是先让线程1,再让线程2.......  每个线程在执行的过程中,python解释器是控制不了的,因为是调的C语言的接口,超出了python的控制范围

入门多线程

本秂侑毒 提交于 2019-12-01 08:30:59
进程的概念 在一个操作系统中,每个独立执行的程序都可称为一个进程,也就是 " 正在运行的程序 "。目前大多数计算机上安装的都是多任务操作系统,即能够同时执行多个应用程序,最常见的有Windows、Linux、Unix等。 在多任务操作系统中,表面上看是支持进程并发执行的,例如可以一边听音乐,一边聊天,但实际上这些进程并不是同时运行的。在计算机中,所有的应用程序都是由CPU执行。对于一个CPU而言,在某个时间点只能运行一个程序,也就是说只能执行一个进程。操作系统会为每一个进程分配一段有限的CPU使用时间,CPU在这段时间中执行某个进程,然后会在下一段时间切换到另一个进程中去执行。由于CPU运行速度很快,能在极短的时间内在不同的进程之间进程切换,所以给人以同时执行多个程序的感觉。 线程的概念 每个运行的程序都是一个进程,在一个进程中还可以有多个执行单元同时进行。这些执行单元可以看做程序执行的一条条线索,被称为线程。操作系统中的每一个进程中都至少存在一个线程。例如当一个Java程序启动时,就会产生一个进程,该进程中会 默认 创建一个线程,在这个线程上会运行main()方法中的代码。 所谓的多线程是指一个进程在执行过程中可以产生多个单线程,这些单线程程序在运行时是相互独立的,它们可以并发执行。 多线程看似是同时执行的,其实不然,它们和进程一样,也是由CPU轮流执行的

多线程基础体系知识清单

三世轮回 提交于 2019-12-01 07:48:33
前言 本文会介绍Java中多线程与并发的基础,适合初学者食用。 线程与进程的区别 在计算机发展初期,每台计算机是串行地执行任务的,如果碰上需要IO的地方,还需要等待长时间的用户IO,后来经过一段时间有了批处理计算机,其可以批量串行地处理用户指令,但本质还是串行,还是不能并发执行。 如何解决并发执行的问题呢? 于是引入了进程的概念,每个进程独占一份内存空间,进程是内存分配的最小单位,相互间运行互不干扰且可以相互切换,现在我们所看到的多个进程“同时"在运行,实际上是进程高速切换的效果。 那么有了线程之后,我们的计算机系统看似已经很完美了,为什么还要进入线程呢?如果一个进程有多个子任务,往往一个进程需要逐个去执行这些子任务,但往往这些子任务是不相互依赖的,可以并发执行,所以需要CPU进行更细粒度的切换。所以就引入了线程的概念,线程隶属于某一个进程,它共享进程的内存资源,相互间切换更快速。 进程与线程的区别: 进程是资源分配的最小单位,线程是CPU调度的最小单位。所有与进程相关的资源,均被记录在PCB中。 线程隶属于某一个进程,共享所属进程的资源。线程只由堆栈寄存器、程序计数器和TCB构成。 进程可以看作独立的应用,线程不能看作独立的应用。 进程有独立的地址空间,相互不影响,而线程只是进程的不同执行路径,如果线程挂了,进程也就挂了。所以多进程的程序比多线程程序健壮,但是切换消耗资源多。

Java之多线程(一)

天涯浪子 提交于 2019-11-29 08:16:33
一,前言 ​ 今天总结一些关于线程方面的知识,说到线程可谓是无人不知,毕竟这东西不管是在工作开发中,还是实际生活中都时时存在着。关于线程方面的内容非常多,从简单的单线程,多线程,线程安全以及到高并发等等,当然也包括信息通信。 ​ 当然这次从线程的基本开始,后面也会慢慢的补充线程的高级使用,这也算是让自己再复习一次了(哈哈)。 ​ 以下内容包括: 二,线程介绍 三,线程的创建 四,线程安全 五,线程池 二,线程介绍 ​ 先来介绍几个关于线程方面的概念。 2.1,并行与并发 并发 :指两个或多个事件在 同一个时间段内 发生。 并行 :指两个或多个事件在 同一时刻 发生(同时发生)。 ​ 在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 CPU 系统中,每一时刻只能有一道程序执行,即微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的,CPU在多个程序之间高速切换。 ​ 而在多个 CPU 系统中,则这些可以并发执行的程序便可以分配到多个处理器上(CPU),实现多任务并行执行,即利用每个处理器来处理一个可以并发执行的程序,这样多个程序便可以同时执行。目前电脑市场上说的多核 CPU,便是多核处理器,核越多,并行处理的程序越多,能大大的提高电脑运行的效率。 注意: 单核处理器的计算机肯定是不能并行的处理多个任务的

Java多线程详解

不打扰是莪最后的温柔 提交于 2019-11-28 05:17:39
线程对象是可以产生线程的对象。比如在 Java 平台中Thread对象,Runnable对象。线程,是指正在执行的一个指点令序列。在java平台上是指从一个线程对象的start()开始,运行run方法体中的那一段相对独立的过程。相比于多进程,多线程的优势有: (1)进程之间不能共享数据,线程可以; (2)系统创建进程需要为该进程重新分配系统资源,故创建线程代价比较小; (3)Java语言内置了多线程功能支持,简化了java多线程编程。 一、创建线程和启动 (1)继承Thread类创建线程类 通过继承Thread类创建线程类的具体步骤和具体代码如下: • 定义一个继承Thread类的子类,并重写该类的run()方法; • 创建Thread子类的实例,即创建了线程对象; • 调用该线程对象的start()方法启动线程。 class SomeThead extends Thraad { public void run() { //do something here } } public static void main(String[] args){ SomeThread oneThread = new SomeThread(); 步骤3:启动线程: oneThread.start(); } (2)实现Runnable接口创建线程类 通过 实现Runnable接口创建线程类

Java 面向对象(十六)

可紊 提交于 2019-11-27 18:57:17
多线程 一、并发与并行 并发 :指两个或多个事件在 同一个时间段内 发生。 并行 :指两个或多个事件在 同一时刻 发生(同时发生)。 在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 CPU 系统中,每一时刻只能有一道程序执行,即微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的。 而在多个 CPU 系统中,则这些可以并发执行的程序便可以分配到多个处理器上(CPU),实现多任务并行执行,即利用每个处理器来处理一个可以并发执行的程序,这样多个程序便可以同时执行。目前电脑市场上说的多核 CPU,便是多核处理器,核越多,并行处理的程序越多,能大大的提高电脑运行的效率。 注意:单核处理器的计算机肯定是不能并行的处理多个任务的,只能是多个任务在单个CPU上并发运行。同理,线程也是一样的,从宏观角度上理解线程是并行运行的,但是从微观角度上分析却是串行运行的,即一个线程一个线程的去运行,当系统只有一个CPU时,线程会以某种顺序执行多个线程,我们把这种情况称之为线程调度。 二、线程与进程 进程 :是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。 线程

【接口】接口压测性能分析及调优建议

我怕爱的太早我们不能终老 提交于 2019-11-27 18:32:38
常见的互联网架构中,一般都能看到spring+mybatis+mysql+redis搭配的身影,在我所服务的公司亦是如此。一般来说,应用内部的接口都是直接调用的,所谓的面向接口编程,应用间的调用直接调或者通过类似dubbo之类的服务框架来执行,数据格式往往采用json,即统一也方便各数据间做转换和取值,缓存一般使用redis或memcached,存储一些对象或json格式的字符串。对外提供的接口,一般都需要进行压力测试,以便估算其性能,并为后续的调优提供指导方向,以下接口便是在压测过程中出现的各种“奇怪现象”,所谓奇怪,指的是从表象上看与我们正常的逻辑思路不符,但其本质还是我们对压力下程序的表现出来的特征不熟悉,用惯用的知识结构试图去解释,这根本是行不通的。下文是我在一次全面压测过程后对数据进行的分析汇总,其中的现象是很多压测常见的,里面的分析过程及改进措施我认为有很大的参考意义。具体内容如下:(部分接口为了安全我省略了其名称,但不影响我们的分析,另外形如1N3T之类的表示的是1台nginx,3台tomcat,具体的tps数值只是为了说明优化前后的比照,没有实际意义) 1 接口名称: 获取列表 1.1 压测现象:单台tps700多,应用cpu高负载   1.1.1 问题分析:     旧框架,平均响应时间长,应用CPU高,程序内部有大量的bean到map到json之间的转换

多线程面试题(值得收藏)

随声附和 提交于 2019-11-27 12:09:49
史上最强多线程面试47题(含答案),建议收藏 金九银十快到了,即将进入找工作的高峰期,最新整理的最全多线程并发面试47题和答案总结,希望对想进BAT的同学有帮助,由于篇幅较长,建议收藏后细看~ 1、并发编程三要素? 1)原子性 原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行。 2)可见性 可见性指多个线程操作一个共享变量时,其中一个线程对变量进行修改后,其他线程可以立即看到修改的结果。 3)有序性 有序性,即程序的执行顺序按照代码的先后顺序来执行。 2、实现可见性的方法有哪些? synchronized或者Lock:保证同一个时刻只有一个线程获取锁执行代码,锁释放之前把最新的值刷新到主内存,实现可见性。 3、多线程的价值? 1)发挥多核CPU的优势 多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的,采用多线程的方式去同时完成几件事情而不互相干扰。 2)防止阻塞 从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势,反而会因为在单核CPU上运行多线程导致线程上下文的切换,而降低程序整体的效率。但是单核CPU我们还是要应用多线程,就是为了防止阻塞。试想,如果单核CPU使用单线程,那么只要这个线程阻塞了,比方说远程读取某个数据吧,对端迟迟未返回又没有设置超时时间,那么你的整个程序在数据返回回来之前就停止运行了

Day33 并发编程(三) 线程池进程池,协程

泪湿孤枕 提交于 2019-11-27 10:41:29
1.进程池和线程池   开进程和开线程都需要消耗资源,只不过线程相比进程耗费的资源较小,但是计算机的硬件是有限制的,我们不能无限制的去开启进程或者线程.进程池和线程池能帮助我们在计算机承受的范围内最大限度的利用计算机 什么是池   在保证计算机硬件安全的情况下最大限度的利用计算机   池其实是降低了程序的运行效率,但是保证了计算机硬件的安全 怎么使用池   我们首先定义一个池子,在里边放入固定数量的进程或线程,只要有任务来了,就派一个进程或线程去处理任务,如果固定数量的进程或线程使用完了,那么接下来的任务就在外面等待,直到有进程或线程的任务执行完毕,外面的任务才可以拿到空闲的进程或线程执行,这样我们既可以同时使用多个进程或线程,又可以保证计算机硬件不会因为任务过多而导致死机等情况 注意:池子中的进程或线程的数量是固定的,可以自己定义数量,但是里边的进程或线程是不会动态改变的.例如工厂中有5个工人,一堆任务过来,他们只能同时执行5个,一个工人做完一个任务之后再做另一个任务,任务在变,但是工人是不会变的,即虽然任务在变,但是进程或线程只会创建一次,执行多少任务还是那几个,这样也节省了反复开闭进程线程的时间 #1 介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 ProcessPoolExecutor: