React系列之:React源码理解-Lane (通道设计)

Lane (通道设计)

  1. 不同类型的任务占有不同的通道位置, 一个通道可以存储多个任务
  2. 通道为总长31位的二进制码, 可用31位

位运算

  1. &= 删除 二进制按位与=> 均为1则为1, 否则为0
  2. |= 添加 二进制按位或=> 有一个为1,则为1
  3. ~ 按位翻转 1=>0, 0=>1 ~0 = -1 -1的值 1111 1111 1111 1110
  4. << 按位左移,左端超出被清除, 右端补0
  5. 0b1100b 代表二进制

二进制数值存储

  1. 符号位:表示数值的正负,1=> 正, 0=>负
    • 原码的最高位为符号位
  2. 补码:二进制形式的补数,支持计算机减法运算而诞生,计算机数值统一使用补码存储;
    • 正数:补码=原码
    • 负数:补码=[负数绝对值]原码(符号位不变)=> 取反 => +1

空通道

  1. 0b0000000000000000000000000000000

添加任务

  1. 使用 lanes << 1与原通道进行运算,添加新任务
  2. 通道类型判断 lanes & ~LANETYPE 再与通道类型比对
    // LANETYPE :lanes设置的初始通道类型
    // lanes : 传入的通道值
    // 示例
     const unblockedLanes = pendingLanes & ~suspendedLanes; // 取与
     //比较
      if (unblockedLanes !== NoLanes) { 
        nextLanes = getHighestPriorityLanes(unblockedLanes);
        nextLanePriority = return_highestLanePriority;
      } 

    获取任务

  3. 相应的获取任务的index, lanes >> index获取到当前任务
  4. 获取最高优先级的通道
    // 原码
    function getHighestPriorityLane(lanes: Lanes) {
    return lanes & -lanes;
    }
    /* 解析 */
    let lanes = /*  */0b0000000000000000000000000001110 //任务集合的当前通道
    // 获取通道中的最右侧为1的任务, 任务的添加是通过左移,所以最右侧为最高优先级
    -lanes =/*      */0b1111111111111111111111111110010 
    lanes & -lanes =  0b0000000000000000000000000000010 //取与获得最右侧任务通道值

删除任务

//原码
  export function removeLanes(set: Lanes, subset: Lanes | Lane): Lanes {
    return set & ~subset;
  }
  /* 解析 */
  let set = /*   */0b0000000000000000000000000001110 //任务集合的当前通道
  //  subset =/* */0b0000000000000000000000000000100 // 要删除的任务通道值
  ~subset =/*    */0b1111111111111111111111111111011 //取反
  set & ~subset =  0b0000000000000000000000000001010 // 取与删除后的通道值
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇