当前位置: 首页 > news >正文

鄂尔多斯网站制作 建设网站建设详细合同范本

鄂尔多斯网站制作 建设,网站建设详细合同范本,网站建设项目付款方式,中国电子系统建设公司网站术语介绍 赋值器:说白了就是你写的程序代码#xff0c;在程序的执行过程中#xff0c;可能会改变对象的引用关系#xff0c;或者创建新的引用。 回收器:垃圾回收器的责任就是去干掉那些程序中不再被引用得对象。 STW:全称是stop the word#xff0c;GC期间某个阶段会停止…术语介绍 赋值器:说白了就是你写的程序代码在程序的执行过程中可能会改变对象的引用关系或者创建新的引用。 回收器:垃圾回收器的责任就是去干掉那些程序中不再被引用得对象。 STW:全称是stop the wordGC期间某个阶段会停止所有的赋值器中断你的程序逻辑以确定引用关系。即STW停止程序运行。 root对象:根对象是指不需要通过其他对象就可以直接访问到的对象通过root对象, 可以追踪到其他存活的对象。 常见的root对: 全局变量程序在编译期就能确定的那些存在于程序整个生命周期的变量这些变量是可能引用堆上的对象或者是指针指向堆上的变量。执行栈每个 goroutine (包括main函数)都拥有自己的执行栈这些执行栈上包含栈上的变量(这些变量本身就可能内存逃逸到堆上或者引用堆上的变量)及指向堆内存地址的指针变量。寄存器寄存器的值可能是一个指针而这个指针可能指向堆内存地址。 标记清除法(V1.3) 步骤 开启STW从根对象开始标记对象清除未被标记的对象关闭STW 缺点 GC期间全程STWGC和用户程序互相干扰不能同时执行。 三色标记法 背景 基于标记清除算法的缺点Golang团队对GC算法进行优化减少STW以便GC和用户程序可以互不干扰并发进行于是就产生了三色标记法。 步骤 GC开始前所有对象都都被标记为白色GC开始时把所有根对象标记为灰色GC进行时遍历灰色对象把灰色对象可达的对象标记为黑色把自己标记为黑色重复第3步直到标记完所有对象GC结束时回收白色对象 缺点 上述三色标记法仍然需要STW因为我们的应用程序会改变对象的应用关系从而影响标记结果的正确性。 比如 一个白色对象被灰色对象引用此时有一个黑色对象改变引用指向这个白色对象而灰色对象到白色对象之间的引用关系又被破坏了此时这个白色对象只被一个黑色对象引用这个白色对象不可能会标记了因此该白色对象丢失 总结 其实总结来看在三色标记法的过程中对象丢失需要同时满足下面两个条件 条件一白色对象被黑色对象引用 条件二灰色对象与白色对象之间的可达关系遭到破坏 看来只要把上面两个条件破坏掉一个就可以保证对象不丢失。可以使用插入写屏障和删除写屏障来破坏上面其中一个条件。 插入写屏障 规则当一个对象引用另外一个对象时将另外一个对象标记为灰色。 解释用来破坏条件一单黑色对象引用白色对象是白色对象就被标记成了灰色对象就不可能出现条件一这种情况出现。 注意 插入屏障仅会在堆内存中生效不对栈内存空间生效。这是因为go在并发运行时大部分的操作都发生在栈上函数调用会非常频繁。数十万goroutine的栈都进行屏障保护自然会有性能问题。 我要补充一下“生效”的具体意思如果一个变量是在堆中如果它改变引用关系指向到另一个对象我们把这个被指向的对象设置为灰色如果一个变量在栈中如果它改变引用关系指向到另一个对象由于插入写屏障不生效所以不用改变被引用的对象颜色为灰色 但是正是因为没有改变为灰色所以才要在GC结束时打开STW重新扫描栈如果栈和堆都使用插入写屏障那就不用扫描重新扫描栈了但是栈上打开STW效率太低了。 步骤 GC开始时堆打开插入写屏障栈不打开GC期间 三色标记法进行标记GC期间堆中对象改变它的应用关系到另外一个对象则把这个“另外对象”给标记为灰色GC结束时打开STW重新扫描栈中对象进行扫描标记GC结束时进行垃圾回收 缺点GC结束时需要打开STW重新扫描栈保证引用的白色对象存活主要保证的是堆中白色对象存活和栈中变量对逃逸到堆中的白色象这些白色对象的产生是因为栈没开插入写屏障。 删除写屏障 规则在删除引用时如果被删除引用的对象自身为灰色或者白色那么被标记为灰色。 解释用来破坏条件二同过把被删除引用的对象设置为灰色把这个被删除引用的对象自己当成可达的那么相当于可达对象被删除引用的这个对象到白色对象被删除引用的这个对象原本就能遍历/访问到的其他对象之间的可达关系又重新建立起来来。这个被删除引用的对象和它能到达的一些对象都保护了起来因此就破坏了条件二。 步骤 GC开始时STW 扫描整个栈所有协程的栈保证所有堆上在用的对象都处于灰色保护下保证的是弱三色不变式GC期间三色标记GC期间某个对象原本引用对象A后来改变引用到对象B则把B对象设置为灰色GC结束时进行垃圾回收 缺点 由于起始快照的原因起始也是执行 STW删除写屏障不适用于栈特别大的场景栈越大STW 扫描时间越长对于现代服务器上的程序来说栈地址空间都很大所以删除写屏障都不适用一般适用于很小的栈内存比如嵌入式物联网的一些程序并且删除写屏障会导致扫描进度波面的后退所以扫描精度不如插入写屏障 注意 在上面的GC步骤1为什么要STW 扫描整个栈所有协程的栈这个问题我说一点我个人的猜测吧毕竟网上查了半天也没有一个人能说明白的有朋友明白原因的麻烦告知一下 首先在说删除写屏障之前时有一个大前提就是不能在栈中使用删除写屏障只在堆中使用。 当我们开启STW后把所有栈道对象都染为黑色那么栈对象直接引用的所有堆对象都被染色成了灰色如下图灰色部门。 因此所有的不是垃圾的堆对象都处于灰色的保护状态中上图蓝色和绿色部分换句话说就是每个堆中的对象都至少被一个灰色对象直接或间接引用。 当堆中的引用关系发生变化时根据删除写屏障把被改变引用的那个堆对象变成灰色就能一定破坏“条件二了” 我们举个反向例子初始状态有2个协程栈 A 是 g1 栈的一个对象g1栈已经扫描完了并且 C 也是扫黑了的对象 B 是 g2 栈的对象指向了 C 和 Dg2 完全还没扫描B 是一个灰色对象D 是白色对象 步骤一g2 进行赋值变更把 C 指向 D 对象这个时候黑色的 C 就指向了白色的 D由于是删除屏障这里是不会把D染色为灰色 步骤二把 B 指向 D 的引用删除由于是栈对象操作不会触发删除写屏障(这里我们讨论的大前提是对栈是不使用删除写屏障的即使把B到D引用关系删除了也不会把D染成灰色) 步骤三GC结束时因为 C 已经是黑色对象了所以不会再扫描所以 D 仍然为白色就会被错误的清理掉。 总结 那么如果我不想一次把所有的协程栈都暂停就会产生上面例子中的问题有什么办法可以解决上面的例子中的问题吗在不同时暂停所有协程栈道情况下这个当然是有的。 解决办法就是使用三色标记法插入写屏障删除写屏障 需要注意混合写屏障扫描栈虽然没有 STW但是扫描某一个具体的栈的时候还是要停止这个 goroutine 赋值器的工作的哈针对一个 goroutine 栈来说是暂停扫的要么全灰要么全黑哈原子状态切换 我们根据上面的这幅图可以看出只要我们在目前的GC策略上再添加上插入写屏障当前的GC策略是三色标记法删除写屏障在C引用D时直接把D染为灰色就能解决所有问题了。 三色标记法插入写屏障(V1.5) 插入写屏障机制和删除写屏障机制中任一机制均可保护对象不被丢失。在V1.5的版本中采用的是插入写机制实现。 三色标记法混合写屏障(V1.8) 背景 从上面的分析中我可以知道 插入写屏障可以做用户程序和GC同时运行什么都好就是要在GC结束时重新扫描栈中的根对象防止堆中的变量被释放 删除写屏障也可以做用户程序和GC同时运行但是需要在GC开始前把所有的协程栈暂停这对协程数量非常多的时候是不可接受的。 那么有没有一种方法在GC开始的时候不需要STW 扫描整个栈把整个栈中的对象标记为黑色在程序结束时不需要再次重新扫描栈以防止对象丢失并且GC程序可以和用户程序同时运行 这种方法就是我们的三色标记法混合写屏障了 步骤 GC开始时优先扫描将栈将栈上可达对象标记为黑色。扫描某个 goroutine 时停止这个 goroutine 赋值器的工作。即goroutine看来是原子操作瞬间全灰/黑。栈扫描完成后解锁。GC期间栈上新建的对象都为黑色堆上被删除的对象标记为灰色堆上新添加的对象标记为灰色 注意写屏障插入、删除写屏障只在堆上启用栈上不开启写屏障 优点 不用在开始时像删除写屏障那样需要同时STW所有协程来标记根栈上的根对象不用在结束时像插入写屏障那样需要再次打开STW重新扫描栈保证引用的白色对象存活
http://www.dnsts.com.cn/news/129602.html

相关文章:

  • 网站编程沧州大型网站建设
  • 青岛模板建站多少钱百度如何发布作品
  • 一下成都网站建设公司seo网站查询工具
  • php怎么做全网小视频网站网站建设合同报价
  • 农安县住房和城乡建设厅网站台州建设企业网站
  • php网站开发师wordpress不能编辑文章
  • 广州建网站技术网站建设教程网哪个好
  • 如今做啥网站能致富湖北省建设工程招标网站
  • 网站怎样做友情链接wordpress上传的文件在哪里
  • 福田欧曼官方网站wordpress 一键登录
  • 界面设计优秀的网站有哪些大丰做网站哪家好
  • 成都建立公司网站wordpress评论区插件
  • 天津市建设协会网站河南网站建设哪家有
  • 女鞋网站建设策划方案山西省住房建设厅网站下载
  • 网站单页seo施工企业市场经营工作思路及措施
  • 上海网站制作全包网站建设 运营
  • 如何让建设一个简单的网站百度网页版入口链接
  • 为企业做网站的公司30_10_郑州网站制作
  • 网站建设和考核工作通知漯河网页制作
  • app推荐网站有没有做兼职的网站
  • 中文网站建设哪家好网站访客记录
  • 做网站公司项目的流程摄影网站的制作
  • 网站备案号几位数字 沪温州网页网站制作
  • 展台设计网站推荐html静态网站开发实验
  • 如何加快门户网站建设方案wordpress请提供一个地址才能继续
  • 网站 外包 版权千万不要学电子信息工程
  • 下列哪些属于营销型网站的基础建设wordpress锚点插件
  • 品牌网站建设十a小蝌蚪网站地图样式
  • 网站注册页面跳出怎么做网站怎样做自适应分辨率大小
  • 简单大气网站源码网页模板网站有那些