精华内容
下载资源
问答
  • 轻量级

    千次阅读 2018-11-07 09:55:02
    轻量级锁是由偏向锁升级来的,偏向锁运行在一个线程进入同步块的情况下,当第二个线程加入锁争用的时候,偏向锁就会升级为轻量级锁(又叫做锁膨胀);  轻量级锁也被称为非阻塞同步、乐观锁,因为这个过程并没有把...

    轻量级锁是由偏向锁升级来的,偏向锁运行在一个线程进入同步块的情况下,当第二个线程加入锁争用的时候,偏向锁就会升级为轻量级锁(又叫做锁膨胀); 

    轻量级锁也被称为非阻塞同步、乐观锁,因为这个过程并没有把线程阻塞挂起,而是让线程空循环等待,串行执行。

    轻量级锁适用于那些同步代码块执行的很快的场景,这样,线程原地等待很短很短的时间就能够获得锁了。轻量级锁膨胀之后,就升级为重量级锁了。

    轻量级锁主要有两种

    ①自旋锁

    ②自适应自旋锁

    展开全文
  • Vue轻量级富文本编辑器-Vue-Quill-Editor

    万次阅读 多人点赞 2018-09-04 19:51:35
    文本方向 [{ 'size': ['small', false, 'large', 'huge'] }], // 字体大小 [{ 'header': [1, 2, 3, 4, 5, 6, false] }], //几标题 [{ 'color': [] }, { 'background': [] }], // 字体颜色,字体背景颜色 [{ 'font'...

         

      先看效果图:女神镇楼
          

               

    1. 下载Vue-Quill-Editor
       
      
      npm install vue-quill-editor --save

       

    2. 下载quill(Vue-Quill-Editor需要依赖)
       
      npm install quill --save

       

    3. 代码
       
      <template>
          <div class="edit_container">
              <quill-editor 
                  v-model="content" 
                  ref="myQuillEditor" 
                  :options="editorOption" 
                  @blur="onEditorBlur($event)" @focus="onEditorFocus($event)"
                  @change="onEditorChange($event)">
              </quill-editor>
          </div>
      </template>
      <script>
      import { quillEditor } from "vue-quill-editor"; //调用编辑器
      import 'quill/dist/quill.core.css';
      import 'quill/dist/quill.snow.css';
      import 'quill/dist/quill.bubble.css';
      export default {
          components: {
              quillEditor
          },
          data() {
              return {
                  content: `<p></p><p><br></p><ol><li><strong><em>Or drag/paste an image here.</em></strong></li><li><strong><em>rerew</em></strong></li><li><strong><em>rtrete</em></strong></li><li><strong><em>tytrytr</em></strong></li><li><strong><em>uytu</em></strong></li></ol>`,
                  editorOption: {}
              }
          },
          methods: {
              onEditorReady(editor) { // 准备编辑器
      
              },
              onEditorBlur(){}, // 失去焦点事件
              onEditorFocus(){}, // 获得焦点事件
              onEditorChange(){}, // 内容改变事件
          },
          computed: {
              editor() {
                  return this.$refs.myQuillEditor.quill;
              },
          }
      }
      </script>
      

      OK,搞定,简洁的富文本编辑器就展现在你眼前了,另外附上API。Vue-Quill-Editor

    4. 自定义 toolbar 菜单
       

      editorOption: {
                    placeholder: "请在这里输入",
                    modules:{
                      toolbar:[
                                ['bold', 'italic', 'underline', 'strike'],    //加粗,斜体,下划线,删除线
                                ['blockquote', 'code-block'],     //引用,代码块
                                [{ 'header': 1 }, { 'header': 2 }],        // 标题,键值对的形式;1、2表示字体大小
                                [{ 'list': 'ordered'}, { 'list': 'bullet' }],     //列表
                                [{ 'script': 'sub'}, { 'script': 'super' }],   // 上下标
                                [{ 'indent': '-1'}, { 'indent': '+1' }],     // 缩进
                                [{ 'direction': 'rtl' }],             // 文本方向
                                [{ 'size': ['small', false, 'large', 'huge'] }], // 字体大小
                                [{ 'header': [1, 2, 3, 4, 5, 6, false] }],     //几级标题
                                [{ 'color': [] }, { 'background': [] }],     // 字体颜色,字体背景颜色
                                [{ 'font': [] }],     //字体
                                [{ 'align': [] }],    //对齐方式
                                ['clean'],    //清除字体样式
                                ['image','video']    //上传图片、上传视频
                                ]
                            }
                      },

       

    5. 存储及将数据库中的数据反显为HTML字符串

      后台接收到数据后会将字符中的标签进行转码,所以我们要先进行一个解码的操作让他变成标签形式的字符串:
      例如后台接收的数据如下:"&lt;h1&gt;title&lt;"  ,对应解码后就是`<h1>title</h1>`。

      //把实体格式字符串转义成HTML格式的字符串
      escapeStringHTML(str) {
          str = str.replace(/&lt;/g,'<');
          str = str.replace(/&gt;/g,'>');
          return str;
      }

      然后将返回值赋值给对应的参数:
       

      <div v-html="str" class="ql-editor">
          {{str}}
      </div>

      上面的str就是转码函数返回的值,我们要先在data中定义,所以我现在将新增跟展示放在一起,代码如下:

       

      <template>
          <div class="edit_container">
              <!--  新增时输入 -->
              <quill-editor 
                  v-model="content" 
                  ref="myQuillEditor" 
                  :options="editorOption" 
                  @blur="onEditorBlur($event)" @focus="onEditorFocus($event)"
                  @change="onEditorChange($event)">
              </quill-editor>
              <!-- 从数据库读取展示 -->
              <div v-html="str" class="ql-editor">
                  {{str}}
              </div>
          </div>
      </template>
      <script>
      import { quillEditor } from "vue-quill-editor"; //调用编辑器
      import 'quill/dist/quill.core.css';
      import 'quill/dist/quill.snow.css';
      import 'quill/dist/quill.bubble.css';
      export default {
          components: {
              quillEditor
          },
          data() {
              return {
                  content: `<p></p><p><br></p><ol><li><strong><em>Or drag/paste an image here.</em></strong></li><li><strong><em>rerew</em></strong></li><li><strong><em>rtrete</em></strong></li><li><strong><em>tytrytr</em></strong></li><li><strong><em>uytu</em></strong></li></ol>`,
                  str: '',
                  editorOption: {}
              }
          },
          methods: {
              onEditorReady(editor) { // 准备编辑器
      
              },
              onEditorBlur(){}, // 失去焦点事件
              onEditorFocus(){}, // 获得焦点事件
              onEditorChange(){}, // 内容改变事件
              // 转码
              escapeStringHTML(str) {
                  str = str.replace(/&lt;/g,'<');
                  str = str.replace(/&gt;/g,'>');
                  return str;
              }
          },
          computed: {
              editor() {
                  return this.$refs.myQuillEditor.quill;
              },
          },
          mounted() {
              let content = '';  // 请求后台返回的内容字符串
              this.str = this.escapeStringHTML(content);
          }
      }
      </script>
      

      最后提醒大家一句,插件只兼容IE10以上,不能向下兼容,如果要向下兼容,只能放弃使用这个插件。     

     

    展开全文
  • JAVA轻量级锁简介

    千次阅读 2018-10-20 17:39:47
    轻量级锁能够提升程序同步性能的一句是“对于绝大部分的锁,在整个同步周期内都是不存在竞争的”,这是一个经验数据。 在 Java Object头文件中,有一个“Mark Word”对象,它是实现轻量级锁的关键。 Mark Word的数据...

    概念

    在某些场景下,去获取对象锁的时候使用CAS的方式,而不是阻塞。
    轻量级锁能够提升程序同步性能的一句是“对于绝大部分的锁,在整个同步周期内都是不存在竞争的”,这是一个经验数据。

    在 Java Object头文件中,有一个“Mark Word”对象,它是实现轻量级锁的关键。
    Mark Word的数据结构非固定,根据不同的状态会有不同的结构。
    比如在32位的HotSpot虚拟机中对象未被锁定的状态下,Mark Word的32bit空间中的25bit用于存储对象哈希码,4bit用于存储对象分代年龄,2bit用于存储锁标志位,1bit固定为0。
    其主要的几个状态如下:

    状态 标志位 存储内容
    未锁定 01 对象哈希码、对象分代年龄
    轻量级锁定 00 指向锁记录的指针
    重量级锁定 10 指向重量级锁的指针
    GC标志 11 空,不需要记录信息
    可偏向 01 偏向线程ID、偏向时间戳,对象分代年龄

    轻量级锁加锁过程

    (1)在代码进入同步块的时候,如果同步对象锁状态为无锁状态(锁标志位为“01”状态),虚拟机首先将在当前线程的栈帧中建立一个名为锁记录(Lock Record)的空间,用于存储旧的Mark Word的拷贝,官方称其为Displaced Mark Word。(锁记录解锁的时候会用到)

    (2)虚拟机将使用CAS操作尝试将对象的Mark Word更新为轻量级锁的标志位和指向锁记录(Lock Record)的指针。

    (3)如果这个更新动作成功了,那么这个线程就拥有了该对象的锁。

    (4)如果这个更新操作失败了,虚拟机首先会检查当前线程是否已经拥有了这个对象的锁,如果已经拥有,那就可以直接进入同步块继续执行。否则就说明这个锁度一项已经被其他线程抢占了。一旦发生这种情况,那么轻量级锁就会膨胀为重量级锁。Mark Word中存储的就会指向重量级锁的指针,后面等待锁的线程也会进入阻塞状态。

    轻量级锁解锁过程

    (1)通过CAS操作尝试把线程中复制的Displaced Mark Word对象替换当前的Mark Word。

    (2)如果替换成功,整个同步过程就完成了。

    (3)如果替换失败,说明有其他线程尝试过获取该锁,并导致该锁变成了重量级锁,那就要在释放锁的同时,唤醒被挂起的线程。

    画图理解

    在这里插入图片描述

    加锁

    用New Mark Word替换Old Mark Word。

    解锁

    用Displaced Mark Word替换New Mark Word。

    展开全文
  • 关于进程、线程和轻量级进程的一些笔记 [维基百科-轻量级进程]https://en.wikipedia.org/wiki/Light-weight_process#See_also 线程与进程概念在现代操作系统中,进程支持多线程。 进程是资源管理的最小单元; ...

    转载

    关于进程、线程和轻量级进程的一些笔记

    [维基百科-轻量级进程]https://en.wikipedia.org/wiki/Light-weight_process#See_also

    线程与进程概念


    在现代操作系统中,进程支持多线程。

    • 进程是资源管理的最小单元;

    • 线程是程序执行的最小单元。

    即线程作为调度和分配的基本单位,进程作为资源分配的基本单位

    一个进程的组成实体可以分为两大部分:线程集和资源集。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括地址空间、打开的文件、用户信息等等,由进程内的线程共享。

    线程概念的产生


    传统单线程进程的缺点


    1. 现实中有很多需要并发处理的任务,如数据库的服务器端、网络服务器、大容量计算等。

    2. 传统的UNIX进程是单线程的,单线程意味着程序必须是顺序执行,不能并发;既在一个时刻只能运行在一个处理器上,因此不能充分利用多处理器框架的计算机。

    3. 如果采用多进程的方法,则有如下问题:

      • fork一个子进程的消耗是很大的,fork是一个昂贵的系统调用,即使使用现代的写时复制(copy-on-write)技术。
      • 各个进程拥有自己独立的地址空间,进程间的协作需要复杂的IPC技术,如消息传递和共享内存等。

    多线程的优缺点


    多线程的优点和缺点实际上是对立统一的。

    支持多线程的程序(进程)可以取得真正的并行(parallelism),且由于共享进程的代码和全局数据,故线程间的通信是方便的。它的缺点也是由于线程共享进程的地址空间,因此可能会导致竞争,因此对某一块有多个线程要访问的数据需要一些同步技术。

    线程的设计过程演变


    在操作系统设计上,从进程演化出线程,最主要的目的就是更好的支持SMP以及减小(进程/线程)上下文切换开销。

    SMP机器上多线程的并行性


    无论按照怎样的分法,一个进程至少需要一个线程作为它的指令执行体,进程管理着资源(比如cpu、内存、文件等等),而将线程分配到某个cpu上执 行。

    一个进程当然可以拥有多个线程,此时,如果进程运行在SMP机器上,它就可以同时使用多个cpu来执行各个线程,达到最大程度的并行,以提高效率;同 时,即使是在单cpu的机器上,采用多线程模型来设计程序,正如当年采用多进程模型代替单进程模型一样,使设计更简洁、功能更完备,程序的执行效率也更 高,例如采用多个线程响应多个输入,而此时多线程模型所实现的功能实际上也可以用多进程模型来实现,而与后者相比,线程的上下文切换开销就比进程要小多 了,从语义上来说,同时响应多个输入这样的功能,实际上就是共享了除cpu以外的所有资源的。

    线程模型–核心级线程和用户级线程


    针对线程模型的两大意义,分别开发出了核心级线程用户级线程两种线程模型,分类的标准主要是线程的调度者在核内还是在核外。前者更利于并发使用多处理器的资源,而后者则更多考虑的是上下文切换开销。

    关于线程的实现模型,可以参见博主的另外一篇博客线程的3种实现方式–内核级线程, 用户级线程和混合型线程

    目前的实现策略


    在目前的商用系统中,通常都将两者结合起来使用,既提供核心线程以满足smp系统的需要,也支持用线 程库的方式在用户态实现另一套线程机制,此时一个核心线程同时成为多个用户态线程的调度者。

    正如很多技术一样,”混合”通常都能带来更高的效率,但同时也 带来更大的实现难度,出于”简单”的设计思路,Linux从一开始就没有实现混合模型的计划,但它在实现上采用了另一种思路的”混合”。

    在线程机制的具体实现上,可以在操作系统内核上实现线程,也可以在核外实现,后者显然要求核内至少实现了进程,而前者则一般要求在核内同时也支持进 程。核心级线程模型显然要求前者的支持,而用户级线程模型则不一定基于后者实现。这种差异,正如前所述,是两种分类方式的标准不同带来的。

    当核内既支持进程也支持线程时,就可以实现线程-进程的”多对多”模型,即一个进程的某个线程由核内调度,而同时它也可以作为用户级线程池的调度 者,选择合适的用户级线程在其空间中运行。这就是前面提到的”混合”线程模型,既可满足多处理机系统的需要,也可以最大限度的减小调度开销。

    绝大多数商业 操作系统(如Digital Unix、Solaris、Irix)都采用的这种能够完全实现POSIX1003.1c标准的线程模型。在核外实现的线程又可以分为”一对一”、”多对 一”两种模型,前者用一个核心进程(也许是轻量进程)对应一个线程,将线程调度等同于进程调度,交给核心完成,而后者则完全在核外实现多线程,调度也在用 户态完成。后者就是前面提到的单纯的用户级线程模型的实现方式,显然,这种核外的线程调度器实际上只需要完成线程运行栈的切换,调度开销非常小,但同时因 为核心信号(无论是同步的还是异步的)都是以进程为单位的,因而无法定位到线程,所以这种实现方式不能用于多处理器系统,而这个需求正变得越来越大,因 此,在现实中,纯用户级线程的实现,除算法研究目的以外,几乎已经消失了。

    Linux内核只提供了轻量进程的支持,限制了更高效的线程模型的实现,但Linux着重优化了进程的调度开销,一定程度上也弥补了这一缺陷。目前 最流行的线程机制LinuxThreads所采用的就是线程-进程”一对一”模型,调度交给核心,而在用户级实现一个包括信号处理在内的线程管理机制。

    三种线程概念——内核线程、轻量级进程、用户线程


    内核线程


    内核线程就是内核的分身,一个分身可以处理一件特定事情。这在处理异步事件如异步IO时特别有用。内核线程的使用是廉价的,唯一使用的资源就是内核栈和上下文切换时保存寄存器的空间。支持多线程的内核叫做多线程内核(Multi-Threads kernel )。

    内核线程只运行在内核态,不受用户态上下文的拖累。

    • 处理器竞争:可以在全系统范围内竞争处理器资源;

    • 使用资源:唯一使用的资源是内核栈和上下文切换时保持寄存器的空间

    • 调度:调度的开销可能和进程自身差不多昂贵

    • 同步效率:资源的同步和数据共享比整个进程的数据同步和共享要低一些。

    轻量级进程


    轻量级进程(LWP)是建立在内核之上并由内核支持的用户线程,它是内核线程的高度抽象,每一个轻量级进程都与一个特定的内核线程关联。内核线程只能由内核管理并像普通进程一样被调度。

    a LWP runs in user space on top of a single kernel thread and shares its address space and system resources with other LWPs within the same process

    轻量级进程由clone()系统调用创建,参数是CLONE_VM,即与父进程是共享进程地址空间和系统资源。

    与普通进程区别:LWP只有一个最小的执行上下文和调度程序所需的统计信息。

    • 处理器竞争:因与特定内核线程关联,因此可以在全系统范围内竞争处理器资源

    • 使用资源:与父进程共享进程地址空间

    • 调度:像普通进程一样调度

    轻量级线程(LWP)是一种由内核支持的用户线程。它是基于内核线程的高级抽象,因此只有先支持内核线程,才能有LWP。每一个进程有一个或多个LWPs,每个LWP由一个内核线程支持。这种模型实际上就是恐龙书上所提到的一对一线程模型。在这种实现的操作系统中,LWP就是用户线程。

    由于每个LWP都与一个特定的内核线程关联,因此每个LWP都是一个独立的线程调度单元。即使有一个LWP在系统调用中阻塞,也不会影响整个进程的执行。

    轻量级进程具有局限性。

    • 首先,大多数LWP的操作,如建立、析构以及同步,都需要进行系统调用。系统调用的代价相对较高:需要在user mode和kernel mode中切换。

    • 其次,每个LWP都需要有一个内核线程支持,因此LWP要消耗内核资源(内核线程的栈空间)。因此一个系统不能支持大量的LWP。

    这里写图片描述

    注:

    1. LWP的术语是借自于SVR4/MP和Solaris 2.x。
    2. 有些系统将LWP称为虚拟处理器。
    3. 将之称为轻量级进程的原因可能是:在内核线程的支持下,LWP是独立的调度单元,就像普通的进程一样。所以LWP的最大特点还是每个LWP都有一个内核线程支持。

    用户线程


    用户线程是完全建立在用户空间的线程库,用户线程的创建、调度、同步和销毁全又库函数在用户空间完成,不需要内核的帮助。因此这种线程是极其低消耗和高效的。

    • 处理器竞争:单纯的用户线程是建立在用户空间,其对内核是透明的,因此其所属进程单独参与处理器的竞争,而进程的所有线程参与竞争该进程的资源。

    • 使用资源:与所属进程共享进程地址空间和系统资源。

    • 调度:由在用户空间实现的线程库,在所属进程内进行调度

    LWP虽然本质上属于用户线程,但LWP线程库是建立在内核之上的,LWP的许多操作都要进行系统调用,因此效率不高。而这里的用户线程指的是完全建立在用户空间的线程库,用户线程的建立,同步,销毁,调度完全在用户空间完成,不需要内核的帮助。因此这种线程的操作是极其快速的且低消耗的。

    这里写图片描述

    上图是最初的一个用户线程模型,从中可以看出,进程中包含线程,用户线程在用户空间中实现,内核并没有直接对用户线程进程调度,内核的调度对象和传统进程一样,还是进程本身,内核并不知道用户线程的存在。

    用户线程之间的调度由在用户空间实现的线程库实现。

    这种模型对应着恐龙书中提到的多对一线程模型,其缺点是一个用户线程如果阻塞在系统调用中,则整个进程都将会阻塞。

    加强版的用户线程——用户线程+LWP


    这种模型对应着恐龙书中多对多模型。

    用户线程库还是完全建立在用户空间中,因此用户线程的操作还是很廉价,因此可以建立任意多需要的用户线程。

    操作系统提供了LWP作为用户线程和内核线程之间的桥梁。LWP还是和前面提到的一样,具有内核线程支持,是内核的调度单元,并且用户线程的系统调用要通过LWP,因此进程中某个用户线程的阻塞不会影响整个进程的执行。

    用户线程库将建立的用户线程关联到LWP上,LWP与用户线程的数量不一定一致。当内核调度到某个LWP上时,此时与该LWP关联的用户线程就被执行。

    这里写图片描述

    Linux使用的线程库


    LinuxThreads是用户空间的线程库,所采用的是线程-进程1对1模型(即一个用户线程对应一个轻量级进程,而一个轻量级进程对应一个特定的内核线程),将线程的调度等同于进程的调度,调度交由内核完成,而线程的创建、同步、销毁由核外线程库完成(LinuxThtreads已绑定到 GLIBC中发行)。

    在LinuxThreads中,由专门的一个管理线程处理所有的线程管理工作。当进程第一次调用pthread_create()创建线程时就会先 创建(clone())并启动管理线程。后续进程pthread_create()创建线程时,都是管理线程作为pthread_create()的调用者的子线程,通过调用clone()来创建用户线程,并记录轻量级进程号和线程id的映射关系,因此,用户线程其实是管理线程的子线程。

    LinuxThreads只支持调度范围为PTHREAD_SCOPE_SYSTEM的调度,默认的调度策略是SCHED_OTHER。
    用户线程调度策略也可修改成SCHED_FIFO或SCHED_RR方式,这两种方式支持优先级为0-99,而SCHED_OTHER只支持0。

    • SCHED_OTHER 分时调度策略,

    • SCHED_FIFO 实时调度策略,先到先服务

    • SCHED_RR 实时调度策略,时间片轮转

    SCHED_OTHER是普通进程的,后两个是实时进程的(一般的进程都是普通进程,系统中出现实时进程的机会很少)。SCHED_FIFO、 SCHED_RR优先级高于所有SCHED_OTHER的进程,所以只要他们能够运行,在他们运行完之前,所有SCHED_OTHER的进程的都没有得到 执行的机会

    小结:

    很多文献中都认为轻量级进程就是线程,实际上这种说法并不完全正确,从前面的分析中可以看到,只有在用户线程完全由轻量级进程构成时,才可以说轻量级进程就是线程。

    展开全文
  • 一种用于序列建模的轻量级递归网络
  • 轻量级偏好数据库:开发指导

    千次阅读 2020-11-13 17:16:30
    轻量级偏好数据库是轻量级存储,主要用于保存应用的一些常用配置,并不适合存储大量数据和频繁改变数据的场景。用户的数据保存在文件中,可以持久化的存储在设备上。需要注意的是用户访问的实例包含文件所有数据,并...
  • 轻量级神经网络

    千次阅读 2018-10-15 17:36:58
    # 轻量级神经网络 MobileNet V1 paper:MobileNets Efficient Convolutional Neural Networks for Mobile Vision Applications link:MobileNet V1 核心点:将标准的卷积因式分解成为depthwise convolution 和 ...
  • 轻量级框架与重量级框架

    千次阅读 2015-10-23 10:05:22
    轻量级框架一般由struts,spring组成,侧重于减小开发的复杂度,相应的它的处理能力便有所减弱(如事务功能弱、不具备分布式处理能力),比较适用于开发中小型企业应用 轻量级框架是相对于重量级框架的一种设计...
  • 轻量级模型:MobileNet V2

    万次阅读 多人点赞 2018-08-05 15:48:57
    一、论文: ... ... ...MobileNet V2 是对 MobileNet V1 的改进,同样是一个轻量级卷积神经网络。 1)基础理论--深度可分离卷积(DepthWise操作) 标准的卷积过程可以看上图,一个2×2的卷积核在...
  • Present 轻量级加密算法 C#实现

    万次阅读 2017-10-20 16:30:29
    Present轻量级加密算法       Present:一种轻量级分组密码 我先用我粗糙的英语给大家翻译一下: 摘要:随着AES的建立,对新块的需求密码已大大减少;几乎所有的分组密码应用程序AES是一个优秀和...
  • java轻量级后端应用服务器从零开始一步步搭建到上线运行...这是一个轻量级服务器搭建的系列文章,各个功能模块都被分解,一章一章的整合进去,从简单到复杂,从简陋到完善,最终就是一个完整的java后台应用服务器项目....
  • 轻量级深度学习网络概览

    千次阅读 2019-01-17 17:23:30
    调研了一下最近的一些轻量级网络,列举并简单介绍各个网络的设计思路 PVANET 2016年1月在arxiv网站第一次提交 文章地址:https://arxiv.org/abs/1608.08021 代码链接:...
  • 常常会听说这个是一个前端的轻量级框架、那个是后端的轻量级框架。 之前你是不是这样认为:比如说Vue.JS是一个轻量级的前端框架,在培训机构的老师是不是这样子教你:“学生们,大家来来看看这个vue.js的源文件是多...
  • 在项目初期定框架方案或者是寻思敏捷开发的时候,经常会看到轻量级、重量级等字眼,那么问题来了, 什么样的框架被叫做轻量级框架,什么样的是重量级框架呢? 1、我觉得最主要的衡量指标是以消耗的资源来决定。比如...
  • 轻量级标记语言--markdown

    千次阅读 2020-04-09 12:09:14
    markdown是一种轻量级的标记语言,常常被用来写博客,在R语言中,通过rmarkdown写分析报告也是非常方便的,markdown可以被转为html,pdf,word格式文档。本文介绍markdown的一些基本语法。 标题 用n个# title号表示...
  • 轻量级框架与重量级框架的区分

    千次阅读 2018-03-26 12:47:09
    一、轻量级框架与重量级框架并没有确却的定义,区分的时候主要从下面几个方面考虑:1、启动程序时需要加载的资源EJB应用启动时,需要消耗大量的资源,比如内存、CPU等,把所有的服务都加载进来;而Spring则是可定制...
  • 浅析轻量级

    千次阅读 2018-03-19 15:51:30
    轻量级锁 来看锁机制。(目前 上的唯一一张图。= =。 因为有些东西没有图的话 是很难理清楚的 - - )对象是否被某个线程的锁定的依据是, 对象头中记录的信息。 mark word 也叫对象标志词。对象头的信息内容是变化...
  • 轻量级Java EE企业应用实战(第3版) 代码

    千次下载 热门讨论 2012-04-19 23:26:08
    轻量级Java EE企业应用实战(第3版) 的所有源码(随书光盘中提出),因上传空间问题将所有jar包提出放在“libs”目录下,如果用哪个可以自己找一下。内有readme.txt自己看下。 急用的兄弟下吧!
  • Java的EE框架的轻量级和重量级

    千次阅读 2017-01-06 15:00:41
    轻量级框架和重量级框架解决问题的侧重点是不同的。一 轻量级框架轻量级框架侧重于减小开发的复杂度,相应的它的处理能力便有所减弱(如事务功能弱、不具备分布式处理能力),比较适用于开发中小型企业应用。采用轻量...
  • java中重量级和轻量级的区别

    千次阅读 2016-05-16 16:13:30
    首先轻量级与重量级是一个相对的概念,主要是对应用框架使用方便性和所提供服务特性等方面做比较的。 重量级的框架在耦合性方面要比轻量级的大一些,但是重量级框架提供的服务要比轻量级的多。 比方说EJB就是一...
  • 简述轻量级与重量级(框架,应用,组件) 一、框架的轻量级与重量级 轻量级与重量级是一个相对的概念,主要是对应用框架使用方便性和所提供服务特性等方面做比较的。 比方说EJB就是一个重量级的框架,因为它对所...
  • 轻量级锁和偏向锁

    千次阅读 2016-11-21 20:53:41
    JVM的两种改善机制——轻量级锁和偏向锁轻量级锁synchronized会在对象的头部打标记,这个加锁的动作是必须要做的,悲观锁通常还会做许多其他的指令动作,轻量级锁希望通过CAS实现,它认为通过CAS尝试修改对象头部的...
  • mysql轻量级的管理工具

    千次阅读 2018-12-01 16:37:17
    mysql轻量级的管理工具 最近用mysql老是发愁,为什么呢?? 因为很多调用mysql的工具都很大型,我想要个轻量级的。 在进过百度谷歌的各种搜索,发现一个在windows平台下非常好的mysql工具:HeidiSQL 官网: ...
  • 轻量级过程改进之综述

    千次阅读 2014-10-21 07:13:44
    轻量级过程改进(Light-weight process improvement,LPI)是一种针对中小型团队软件研发过程中普遍存在的重技术轻管理、研发管理缺乏规范、过程改进理念淡薄等现状和问题而整理的一种“软件过程改进方法和规范”,...
  • Oracle轻量级客户端使用

    千次阅读 2018-10-27 00:24:13
    Oracle轻量级客户端,不需要安装,绿色版,可以用于本地或者远程数据库连接,包含了基本的sqlplus,数据泵等功能。 官方解释如下:...
  • 轻量级私有云解决方案

    千次阅读 2019-02-14 15:05:58
    思询科技致力于成为领先的云计算解决方案供应商,所提供的轻量级私有云解决方案是一体化集中式云管理服务平台,已经形成涵盖IaaS、PaaS、SaaS三个层面整体解决方案服务能力,凭借高端服务器、海量存储、云管理平台、...
  • 什么是轻量级、重量级框架

    千次阅读 2018-02-24 11:18:49
    划分一个应用是否属于轻量级还是重量级,不是说这个框架占了服务器多大的内存空间,这个框架就是重量级的框架,主要是看它使用了多少的服务,使用的服务越多,容器要为普通java对象做的工作就会越多。必然会影响到...
  • 锁的状态总共有四种:无锁状态、偏向锁、轻量级锁和重量级锁。随着锁的竞争,锁可以从偏向锁升级到轻量级锁,再升级的重量级锁(但是锁的升级是单向的,也就是说只能从低到高升级,不会出现锁的降级)
  • FlashDB V1.0.0 正式版发布,轻量级嵌入式数据库

    千次阅读 热门讨论 2020-10-15 13:58:33
    FlashDB 是一款超轻量级的嵌入式数据库,专注于提供嵌入式产品的数据存储方案。与传统的基于文件系统的数据库不同,FlashDB 结合了 Flash 的特性,具有较强的性能及可靠性。并在保证极低的资源占用前提下,尽可能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 138,421
精华内容 55,368
关键字:

轻量级