精华内容
下载资源
问答
  • 线程是什么意思

    千次阅读 2019-06-10 10:59:47
    一条线程指的进程中一个单一顺序的控制流,一个进程中可以并发个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更指内核线程(kernel ...

    线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。
    线程是独立调度和分派的基本单位。线程可以为操作系统内核调度的内核线程,如Win32线程;由用户进程自行调度的用户线程,如Linux平台的POSIX Thread;或者由内核与用户进程,如Windows 7的线程,进行混合调度。
    同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。
    一个进程可以有很多线程,每条线程并行执行不同的任务。
    在多核或多CPU,或支持Hyper-threading的CPU上使用多线程程序设计的好处是显而易见,即提高了程序的执行吞吐率。在单CPU单核的计算机上,使用多线程技术,也可以把进程中负责I/O处理、人机交互而常被阻塞的部分与密集计算的部分分开来执行,编写专门的workhorse线程执行密集计算,从而提高了程序的执行效率。

    展开全文
  • 初衷,考虑到不同节点的CPU性能可能不同,每个CPU具有的计算能力也不一样的,比如某个物理CPU的计算能力可能另外一个物理CPU的2倍,这时候,你可以通过为第一个物理CPU配置几个虚拟CPU弥补这种差异。...

    Hadoop  YARN同时支持内存和CPU两种资源的调度,默认只支持内存,如果想进一步调度CPU,需要自己进行一些配置。

    目前的CPU被划分成虚拟CPU(CPU virtual Core),这里的虚拟CPU是YARN自己引入的概念,初衷是,考虑到不同节点的CPU性能可能不同,每个CPU具有的计算能力也是不一样的,比如某个物理CPU的计算能力可能是另外一个物理CPU的2倍,这时候,你可以通过为第一个物理CPU多配置几个虚拟CPU弥补这种差异。用户提交作业时,可以指定每个任务需要的虚拟CPU个数。

    内存资源的多少会会决定任务的生死,如果内存不够,任务可能会运行失败;相比之下,CPU资源则不同,它只会决定任务运行的快慢,不会对生死产生影响。

    由于CPU资源的独特性,目前这种CPU分配方式仍然是粗粒度的。很多任务可能是IO密集型的,消耗的CPU资源非常少,如果此时为它分配一个CPU,则是一种严重浪费,完全可以和其他几个任务共用这个CPU.也就是说,我们需要支持更细粒度的CPU表达方式。借鉴亚马逊EC2中CPU资源的划分方式,即提出了CPU最小单位为EC2 Compute Unit(ECU),一个ECU代表相当于1.0-1.2 GHz 2007 Opteron or 2007 Xeon处理器的处理能力。YARN提出了CPU最小单位YARN Compute Unit(YCU),目前这个数是一个整数,默认是720,由参数yarn.nodemanager.resource.cpu-ycus-per-core设置,表示一个CPU core具备的计算能力(该feature在目前已知版本中不存在https://issues.apache.org/jira/browse/YARN-1089 & https://issues.apache.org/jira/browse/YARN-1024),这样,用户提交作业时,直接指定需要的YCU即可,比如指定值为360,表示用1/2个CPU core,实际表现为,只使用一个CPU core的1/2计算时间。注意,在操作系统层,CPU资源是按照时间片分配的,你可以说,一个进程使用1/3的CPU时间片,或者1/5的时间片。

    关于虚拟内存,官方提供了以下几个参数

    (1) yarn.nodemanager.vmem-pmem-ratio = 2.1

    Ratio between virtual memory to physical memory when setting memory limits for containers. Container allocations are expressed in terms of physical memory, and virtual memory usage is allowed to exceed this allocation by this ratio.

    每单位的物理内存总量对应的虚拟内存量,默认是2.1,表示每使用1MB的物理内存,最多可以使用2.1MB的虚拟内存总量。

    (2)yarn.nodemanager.resource.cpu-vcores=64

    该节点上YARN可使用的虚拟CPU个数,默认是8.注意,目前推荐将该值设值为与物理CPU核数数目相同。如果你的节点CPU核数不够8个,则需要调减小这个值,而YARN不会智能的探测节点的物理CPU总数。

    (3) yarn.scheduler.minimum-allocation-vcores=1

    单个任务可申请的最小虚拟CPU个数,默认是1,如果一个任务申请的CPU个数少于该数,则该对应的值改为这个数。

    (4)yarn.scheduler.maximum-allocation-vcores=64

    单个任务可申请的最多虚拟CPU个数,默认是32。

    (5) yarn.nodemanager.vmem-check-enabled(undefined,default=true)

    Whether virtual memory limits will be enforced for containers. 是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true。

    yarn.nodemanager.vmem-check-enabled 参数十分简单,就是对vmemLimit监控的开关a. yarn.nodemanager.vmem-pmem-ratio 这个参数可能是最让人困惑的了,网上搜出的资料大都出自官方文档的解释,不够清晰明彻。下面结合源代码和大家解释一下这个参数到底在控制什么。

    blob.png

     

    首先,NodeManager 接收到 AppMaster 传递过来的 Container 后,会用 Container 的物理内存大小 (pmem) * yarn.nodemanager.vmem-pmem-ratio 得到 Container 的虚拟内存大小的限制,即为 vmemLimit:

    long pmemBytes = container.getResource().getMemory() * 1024 * 1024L;
    
    float pmemRatio = container.daemonConf.getFloat(YarnConfiguration.NM_VMEM_PMEM_RATIO, YarnConfiguration.DEFAULT_NM_VMEM_PMEM_RATIO);
    
    long vmemBytes = (long) (pmemRatio * pmemBytes);

    然后,NodeManager 在 monitor 线程中监控 Container 的 pmem(物理内存)和 vmem(虚拟内存)的使用情况。如果当前 vmem 大于 vmemLimit 的限制,或者 olderThanAge(与 JVM 内存分代相关)的内存大于限制,则 kill 掉进程:

    if (currentMemUsage > (2 * vmemLimit)) {
    
        isOverLimit = true;
    
    } else if (curMemUsageOfAgedProcesses > vmemLimit) {
    
        isOverLimit = true;
    
    }

    kill 进程的代码如下:

    if (isMemoryOverLimit) {
    
        // kill the container
    
        eventDispatcher.getEventHandler().handle(new ContainerKillEvent(containerId, msg));
    
    }

    这里的 vmem 究竟是不是 OS 层面的虚拟内存概念呢?我们来看一下源码是怎么做的。

    ContainerMontor 就是上述所说的 NodeManager 中监控每个 Container 内存使用情况的 monitor,它是一个独立线程。ContainerMonitor 获得单个 Container 内存(包括物理内存和虚拟内存)使用情况的逻辑如下:

    Monitor 每隔 3 秒钟就更新一次每个 Container 的使用情况;更新的方式是:

    • 查看 /proc/pid/stat 目录下的所有文件,从中获得每个进程的所有信息;

    • 根据当前 Container 的 pid 找出其所有的子进程,并返回这个 Container 为根节点,子进程为叶节点的进程树;在 Linux 系统下,这个进程树保存在 ProcfsBasedProcessTree 类对象中;

    • 然后从 ProcfsBasedProcessTree 类对象中获得当前进程 (Container) 总虚拟内存量和物理内存量。

    由此大家应该知道了,内存量是通过 /proc/pid/stat 文件获得的,且获得的是该进程及其所有子进程的内存量。所以,这里的 vmem 就是 OS 层面的虚拟内存概念。

    总结

         yarn默认yarn.nodemanager.vmem-check-enabled 开启检测一个线程检查每个任务正使用的虚拟内存量VmemLimit,如果任务超出分配值,则直接将其杀掉.

         VmemLimit=(pmem) * yarn.nodemanager.vmem-pmem-ratio ;

    在map阶段,VmemLimit= mapreduce.map.memory.mb(1G) * yarn.nodemanager.vmem-pmem-ratio = 2.1G;

    在reduce阶段, VmemLimit = mapreduce.reduce.memory.mb(1G) *  yarn.nodemanager.vmem-pmem-ratio = 2.1G;

    基于当前集群job提交情况,虚拟内存不够用的job属于少数,相比关闭VmemLimit的监控,推荐调整pmem-ratio,如有必要可再job session中加大Memory进行优化。

         设置后需要重启Resource Manager,参见 https://issues.apache.org/jira/browse/YARN-4714 

    blob.png

    blob.png

    blob.png

    blob.png

    展开全文
  • C/S结构,即Client/Server(客户机/服务器)结构,大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势。早期的软件系统以此作为首选...

    C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势。早期的软件系统多以此作为首选设计标准。。
    B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现,形成所谓3-tier结构。B/S结构,主要是利用了不断成熟的WWW浏览器技术,结合浏览器的多种Script语言(VBScript、JavaScript…)和ActiveX技术,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。随着Windows 98/Windows 2000将浏览器技术植入操作系统内部,这种结构更成为当今应用软件的首选体系结构。

    C/S 与 B/S 区别:
    Client/Server是建立在局域网的基础上的.Browser/Server是建立在广域网的基础上的.
    1.硬件环境不同:
    C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.
    B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行
    2.对安全要求不同
    C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息.
    B/S 建立在广域网之上, 对安全的控制能力相对弱, 面向是不可知的用户群.
    3.对程序架构不同
    C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑.
    B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟.
    4.软件重用不同
    C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好.
    B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子
    5.系统维护不同
    系统维护是软件生存周期中,开销大, -------重要
    C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统
    B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级.
    6.处理问题不同
    C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统
    B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小.
    7.用户接口不同
    C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高
    B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本.
    8.信息流不同
    C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低
    B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化, 更象交易中心
    转载自:https://zhidao.baidu.com/question/3711387.html

    展开全文
  • SaaS型微服务脚手架,具备用户管理、资源权限管理、网关统一鉴权、Xss防跨站攻击、自动代码生成、存储系统、分布式事务、分布式定时任务个模块,支持业务系统并行开发, 支持服务并行开发,可以作为后端...

    简介

    基于SpringCloud(Hoxton.SR1) + SpringBoot(2.2.4.RELEASE) 的 SaaS型微服务脚手架,具备用户管理、资源权限管理、网关统一鉴权、Xss防跨站攻击、自动代码生成、多存储系统、分布式事务、分布式定时任务等多个模块,支持多业务系统并行开发, 支持多服务并行开发,可以作为后端服务的开发脚手架。代码简洁,架构清晰,非常适合学习使用。核心技术采用Nacos、Fegin、Ribbon、Zuul、Hystrix、JWT Token、Mybatis、SpringBoot、Seata、Nacos、Sentinel、 RabbitMQ、FastDFS等主要框架和中间件。

    希望能努力打造一套从 SaaS基础框架 - 分布式微服务架构 - 持续集成 - 系统监测 的解决方案。本项目旨在实现基础能力,不涉及具体业务。

    灵魂发问:我们为什么要学习SpringBoot???

    官方对 Spring Boot 的定位:Build Anything, Build 任何东西。Spring Boot 旨在尽可能快地启动和运行,并且只需最少的 Spring 前期配置。 同时我们也来看一下官方对后面两个的定位:SpringCloud:Coordinate Anything,协调任何事情; SpringCloud Data Flow:Connect everything,连接任何东西。仔细品味一下,Spring 官网对 Spring Boot、SpringCloud 和 SpringCloud Data Flow三者定位的措辞非常有味道,同时也可以看出,Spring 官方对这三个技术非常重视,是现在以及今后学习的重点。

    Spring Boot 有哪些优点?主要给我们解决了哪些问题呢?

    • 良好的基因

    • 简化编码

    • 简化配置

    • 简化部署

    • 简化监控

    好吧,不绕弯子了,步入咱们今天的主题,搬出最全SpringBoot学习教程…(SpringBoot教程+SpringBoot学习宝典)

    注意下啦,由于篇幅的原因,更加详情的知识内容已整理好成“SpringBoot教程+SpringBoot学习宝典”的文档,这边只粗略的介绍一番,需要更加深入学习的朋友可以在文末领取

    01 SpringBoot教程

    SpringBoot教程.png

    hello world

    • 1. 起步

    • 2. 注解区别?

    • 3. 依赖讲解

    image.png

    配置文件、日志处理、web实战

    image.png

    • 配置文件

    image.png

    • 日志处理

    日志处理.png

    • web实战项目

    web实战项目.png

    嵌入式Servlet容器、Docker、数据访问

    image.png

    • 嵌入式Servlet容器

    image.png

    • Docker

    image.png

    • 数据访问

    image.png

    02 SpringBoot宝典

    基础篇(01—10 章)主要介绍 Spring Boot 在项目中最常使用的一些功能点,旨在带领学习者快速掌握 Spring Boot 在开发时需要的知识点,能够把 Spring Boot 相关技术运用到实际项目架构中去。该部分以 Spring Boot 框架为主线,内容包括 Json 数据封装、日志记录、属性配置、MVC 支持、在线文档、模板引擎、异常处理、AOP 处理、持久层集成等等。

    基础篇(01—10 章).png

    进阶篇(11—17 章)主要是介绍 Spring Boot 在项目中拔高一些的技术点,包括集成的一些组件,旨在带领学习者在项目中遇到具体的场景时能够快速集成,完成对应的功能。该部分以 Spring Boot 框架为主线,内容包括拦截器、监听器、缓存、安全认证、分词插件、消息队列等等。

    进阶篇(11—17 章).png

    最后

    金三银四到了,送上一个小福利!

    资料领取方式:点击这里蓝色传送门

    image.png

    image.png

    专题+大厂.jpg

    991)]

    [外链图片转存中…(img-QTxlD40R-1622520905992)]

    [外链图片转存中…(img-lHNdWUGs-1622520905993)]

    展开全文
  • 多任务是用户在同一时间内运行多个进程。 举个生活中的小栗子 当你在上你最喜爱的编程课的时候,你的好兄弟 一颗剽悍的种子 叫你吃鸡,你想啊,难得好兄弟叫你一起开黑,当然是赶紧上号;所以你一边和好兄弟一起...
  • 第4章主菜单模块的开发 本章目录 4 1任务说明4 2任务分析4 3任务实施4 4知识点详解4 4 1字符型数据4 4 2分支switch语句 4 1任务说明 任务描述 编写计算器中主函数 main 的菜单选择 输入不同的字母 进入不同的运算 ...
  • 这一点的意思就是当用户认为自己在做一件意义非凡的事情时,动力就会变得非常强,这就是为什么游戏会给玩家画一个“大饼”,比如拯救世界,人们天生喜欢挑战,渴望成为英雄,看到这种剧情自然会有种“你成功引起...
  • linux一套开放源代码程序的并可以自由传播的类UNix操作系统软件(Unixlinux的前身具备很多优秀特性)其在设计之初就是基于X86系列CPU架构计算机的,他一个基于posix的多用户多任务并且支持多线程和多CPU的...
  • 为了单用户使用并提供比个人计算机更强大的性能,尤其在图形处理能力,任务并行方面的能力。 通常配有高分辨率的大屏、屏显示器及容量很大的内存储器和外部存储器,并且具有极强的信息和高性能的图形、图像...
  • 在Linux系统中,由于是多用户多任务的环境,所以会有多用户共同使用一个硬盘空间的情况发生,如果其中有少数几个用户大量占掉了硬盘空间的话,那肯定影响其他用户的使用权限。因此管理员应该适当限制硬盘的空间给...
  • 因为js的主要用途用于用户交互和操作DOM,如果是多线程的,会引起复杂的同步问题, 比如一个线程操作某个节点的内容,另一个线程同一时间却在删除这个节点,这时候到底该执行那一条命令呢?到底以哪一个线程为准呢...
  • IOS面试------线程

    2015-09-08 22:43:11
    1 多线程是什么 多线程是个复杂的概念...从操作系统角度,是多任务,现在用的主流操作系统都是多任务的,可以一边听歌、一边写博客;对于应用来说,多线程可以让应用有更快的回应,可以在网络下载时,同时响应用户
  • iOS进阶面试题----线程

    万次阅读 2013-11-08 17:49:37
    1 多线程是什么  多线程是个复杂的概念...从操作系统角度,是多任务,现在用的主流操作系统都是多任务的,可以以便听歌、一边写博客;对于应用来说,多线程可以让应用有更快的回应,可以在网络下载时,同时响应用户
  • 文章目录1 什么是Thread-Per-Message模式2 每个任务一个线程3 多用户的网络聊天 1 什么是Thread-Per-Message模式 Thread-Per-Message的意思是为每一个消息的处理开辟一个线程使得消息能够以并发的方式进行处理,从而...
  • 执行top命令时,出现一堆结果不知道什么意思,于是一通查找,大概搞明白了输出结果的含义,其中比较重要的几个参数: us:user state 用户态信息 sy:system state内核态信息 id:空闲状态 关于用户态和内核态个...
  • 在开始之前,我想澄清一些事情:第一件事,我们今天将要执行的步骤和功能将面向使用Windows的用户,这因为我们将使用“ win32”库,该库使我们能够与操作系统交互。 我想澄清的另一件事,在本文中,我不会...
  • windows用户称拦截api

    2015-04-06 17:22:24
    带参数的函数调用的汇编代码是什么样子呢,前面也已经说了,类似与调用MessageBoxA时的代码: PUSH 参数地址 CALL 函数入口地址(这里为一个偏移地址) 执行这2条指令就能跳转到你要拦截的函数了,但是我们该修改成...
  • 面试题(八)

    2015-11-24 11:54:00
    1 多线程是什么 ...从操作系统角度,是多任务,现在用的主流操作系统都是多任务的,可以一边听歌、一边写博客;对于应用来说,多线程可以让应用有更快的回应,可以在网络下载时,同时响应用户的...
  • iOS面试五

    2015-03-03 16:02:54
    1 多线程是什么 ...从操作系统角度,是多任务,现在用的主流操作系统都是多任务的,可以一边听歌、一边写博客;对于应用来说,多线程可以让应用有更快的回应,可以在网络下载时,同时响应用户的触
  • 磁盘配额(quota)

    2019-06-27 09:46:42
    因为Linux是多用户多任务的操作系统,许多人公用磁盘空间,举个例子像/home目录存放普通用户家目录的地方,我们假如home目录一共有10G空间,而home下一共有三个用户,那么正常划分的话每个人应该分得大概333M...
  • java中线程安全问题

    2016-06-28 20:49:00
    在java中单线程和线程是什么意思,他们有什么区别,分别的作用是什么? 在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“线程处理”。线程处理一个常见的例子就是用户...
  • quota

    2019-09-23 16:07:56
    因为Linux是多用户多任务的操作系统,许多人公用磁盘空间,举个例子像/home目录存放普通用户家目录的地方,我们假如home目录一共有10G空间,而home下一共有三个用户,那么正常划分的话每个人应该分得大概333M...
  • 因为Linux是多用户多任务的操作系统,许多人公用磁盘空间,举个例子像/home目录存放普通用户家目录的地方,我们假如home目录一共有10G空间,而home下一共有三个用户,那么正常划分的话每个人应该分得大概333M...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 183
精华内容 73
关键字:

多用户多任务是什么意思